2014-07-25 2 views
2

안드로이드에 대한 화면을 변경하는 방법에 대한 많은 자습서를 보았습니다. 모든 프로젝트를 이해하고/할 수 없으므로 모든 것이 도움이 될 수 있습니다. 나는 4 개의 xml 파일을 가지고있다. 3 개의 버튼이 있지만 그 중 2 개만이 페이지를 설정하는데 사용된다. 앱이 다른 페이지 중 하나를로드하도록 할 수는 있지만 버튼을 설정할 수는 없습니다 (중요한 비트). 도움을 주시면 감사하겠습니다.콘텐트를 사용하여 버튼으로 콘텐트 뷰를 변경하는 방법

package com.store.shrek2; 


import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends ActionBarActivity { 
int activityloaded = 1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    Button button1 = (Button) this.findViewById(R.id.button1); 
    Button button2 = (Button) this.findViewById(R.id.button2); 
    Button button3 = (Button) this.findViewById(R.id.button3); 
    Button button4 = (Button) this.findViewById(R.id.button4); 
    Button button5 = (Button) this.findViewById(R.id.button5); 
    Button button6 = (Button) this.findViewById(R.id.button6); 
    if(activityloaded == 1){ 
    button1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
     }}); 
    button2.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      activityloaded = 2; 
     }}); 
    button3.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      activityloaded = 4; 
      setContentView(R.layout.activity4); 
     }}); 
    } 
    if(activityloaded == 2){ 
    setContentView(R.layout.activity2); 
    button4.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      setContentView(R.layout.activity3); 
     }}); 
    } 
    } 
} 



<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.store.shrek2" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="21" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".activity2"></activity> 
    <activity android:name=".activity3"></activity> 
    <activity android:name=".activity4"></activity> 
</application> 

</manifest> 
+0

레이아웃 파일 당 하나의 활동을 사용하지 않는 이유는 무엇입니까? – joao2fast4u

+0

또는 하나의 활동 및 4 개의 단편. – Fenix

답변

0

setCoententView (INT 레이아웃) 그렇지 않으면 작동하지 않습니다, 모든 문장 전에 호출해야합니다 .. 당신은 당신이 원하는 것을 할 두 가지 선택이있다 :

  1. 사용 안드로이드 조각의 메커니즘이다 최선의 방법 또는
  2. 레이아웃 파일 당 하나의 활동을 사용하십시오.
4

문제 해결 방법에 대한 아이디어를 얻으려면 다음 지침을 따르십시오.

  • 첫째, 하나의 작업을 만들 - 당신의 조각을 만들고,
  • 둘째 MainActivity를 호출 - 그들이 얼마나 많은에 따라 :
  • 셋째, 그 조각을 위해 각각의 XML 파일을 만듭니다.
  • 넷째, 가지고있는 모든 조각에 완전히 다른 유형의보기가 있다고 가정합니다. 그렇지 않으면 조각을 다시 사용하고 그 수를 줄일 수 있습니다.
  • 버튼을 메인보기로 가져 가면 새로운 버튼을 터치하여 새로운 레이아웃으로 전환 할 수 있습니다.
  • 당신이 당신의 조각을 관리 할 주요 활동을 사용하는 것 때문에

,

  • 는 클릭 리스너를 구현하고 버튼에 연결합니다.
  • 둘째, 당신의 버튼의 ID (switch 문을 사용) 주어진 버튼을 클릭하면,
  • 이 각각의 조각의 새로운 인스턴스를 생성하고 설정하거나 즉, 그것은 볼로드 (추가 전환). 필요에 따라 백 스택에 추가하여 뒤로 버튼을 사용하여 뒤로 쉽게 이동할 수 있습니다.
  • 다른 버튼 (예 : button2)을 클릭하면 올바른 단편을로드하는 것을 제외하고 button1을 클릭했을 때와 동일한 작업을 수행합니다.
  • 조각을 사용하는 시점은 조각을 다시 사용할 수 있어야합니다. 또한 파편은 스스로 필요한 모든 것을 할 수 있기 때문에 활동에서 너무 많은 일을하지 않아야합니다.

예제 코드 : MainActivity.java

public class MainActivity extends Activity implements View.OnClickListener 
{ 
    private Button mLoadFragmentOne; 
    private Button mLoadFragmentTwo; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     mLoadFragmentOne = (Button)findViewById(R.id.buttonOne); 
     mLoadFragmentTwo = (Button)findViewById(R.id.buttonTwo); 

     mLoadFragmentOne.setOnClickListener(this); 
     mLoadFragmentTwo.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View view) 
    { 
     switch(view.getId()) 
     { 
      case R.id.buttonOne: 
       FragmentOne fragmentOne = new FragmentOne(); 

       loadFragment(fragmentOne, "fragmentOne"); 

       break; 
      case R.id.buttonTwo: 
       FragmentTwo fragmentTwo = new FragmentTwo(); 

       loatFragment(fragmentTwo, "fragmentTwo"); 

       break; 
      default: 
       break; 
     } 
    } 

    /** 
    * This fragment container will be part of the main view. 
    */ 
    public void loadFragment(Fragment frag, String tag) 
    { 
     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 

     Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentContainer); 
     if(fragment == null) 
     { 
      ft.add(R.id.fragmentContainer, frag, tag); 
     } else 
     { 
      ft.replace(R.id.fragmentContainer, frag, tag); 
     } 
     ft.addToBackStack(null); 

     ft.commit(); 
    } 
} 

FragmentOne.자바

public class FragmentOne extends Fragment 
{ 
    private final String TAG = "com.example.app.FragmentOne"; 

    private Activity mActivity; 

    public void onAttach(Activity act) 
    { 
    super.onAttach(act); 

    this.mActivity = act; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 

     //do whatever you want here - like adding a listview or anything 

     return view; 
    } 
} 

FragmentTwo.java는

public class FragmentTwo extends Fragment 
{ 
    private final String TAG = "com.example.app.FragmentTwo"; 

    private Activity mActivity; 

    @Override 
    public void onAttach(Activity act) 
    { 
     super.onAttach(act); 

     this.mActivity = act; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
    View view = inflator.inflate(R.layout.fragment_two, container, false); 

    //do whatever you want here - like set text to display in your fragment 

    return view; 
    } 
} 

지금, 당신은 단순히 당신의 작업을 수행하려면이 코드 샘플을 사용할 수 있습니다.

여기에서 요점은 컨테이너를 만드는 것입니다. 예를 들어 기본보기의 프레임 레이아웃이 될 것입니다. ID를 지정하고 이것이 조각이로드 될 위치임을 기억하십시오.

사용자가보기간에 앞뒤로 쉽게 이동할 수 있도록 다른 것들을 추가해야합니다.

마지막으로 두 개의 조각 XML 파일을 만들어야합니다. 이미지, 텍스트 및 목록 또는 격자와 같이 사용자가보고 싶은 모든 것을 포함 할 수 있습니다. 그것은 당신이 선택한 것입니다.

그게 내가 시간을 허비 할 수있는 전부이며, 내가 너를 돕기를 바란다.

이 지침을 단계별로 수행하면 문제를 해결할 수 있습니다. 행운을 빕니다.