2016-10-10 123 views
0

我在片段中遇到麻煩。我有兩個片段&這兩個片段都包含List。我正在做的是,當用戶點擊按鈕時,片段應該從另一個片段中替換。我得到的問題,當我點擊按鈕的另一個片段是下面到當前片段。如何用另一個片段替換片段?

截圖

enter image description here

MainActivity

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void selectFrag(View view) { 
     Fragment fr; 

     if(view == findViewById(R.id.button2)) { 
      fr = new FragmentTwo(); 

     }else { 
      fr = new FragmentOne(); 
     } 

     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_place, fr); 
     fragmentTransaction.commit(); 

    } 

} 

FragmentOne.Class

public class FragmentOne extends ListFragment implements OnItemClickListener { 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.fragment_one, container, false); 
    } 


    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.action, android.R.layout.simple_list_item_1); 
     setListAdapter(adapter); 
     getListView().setOnItemClickListener(this); 
    } 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
     Object o = this.getListAdapter().getItem(position); 
     String pen = o.toString(); 

     // Toast.makeText(getActivity(), pen, Toast.LENGTH_SHORT).show(); 
    } 



} 

FragmentTwo.Class

public class FragmentTwo extends ListFragment implements OnItemClickListener { 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.fragment_two, container, false); 
    } 



    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.type, android.R.layout.simple_list_item_1); 
     setListAdapter(adapter); 
     getListView().setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
     Object o = this.getListAdapter().getItem(position); 
     String pen = o.toString(); 

     // Toast.makeText(getActivity(), pen, Toast.LENGTH_SHORT).show(); 
    } 

} 

activity_main

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:onClick="selectFrag" 
     android:text="Fragment No.1" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:onClick="selectFrag" 
     android:text="Fragment No.2" /> 

    <fragment 
     android:id="@+id/fragment_place" 
     android:name="com.example.pitech09.myapplication.FragmentOne" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 
+0

當應用第一次啓動時沒有顯示片段,是正確的嗎? –

+0

當應用程序啓動時顯示FragmentOne –

+2

確保'R.id.fragment_place'對應於佈局容器(例如'FrameLayout') –

回答

1

由於@RishabhDuttSharma建議,在使用的FrameLayout代替fragment您活動layou t並在代碼中初始化第一個片段。

佈局:

<FrameLayout 
    android:id="@+id/fragment_place" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Fragment fr = new FragmentOne(); 
    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_place, fr); 
    fragmentTransaction.commit(); 
} 
-1

使用此代碼在您的MainActivity

Button btnList = (Button) findViewById(R.id.btnList); 
    Button btnGrid = (Button) findViewById(R.id.btnGrid); 
    btnList.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final Fragment listfragment = new ListFragment(); 
      getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.fragment_place, listfragment).commit(); 

     } 
    }); 
    btnGrid.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final Fragment gridfragment = new GridFragment(); 
      getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.fragment_place, gridfragment).commit(); 
     } 
    }); 
+0

其不工作 –

+0

使用框架佈局而不是片段。 @KritiJain。 –

+0

@KoVartthan另一個問題在於你建議使用'getSupportFragmentManager',但他沒有使用'AppCompatActivity',因此應該使用'getFragmentManager'來代替。 –

1

//主要活動

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
<!-- a frame layout for replace in full--> 
     <FrameLayout 
       android:id="@+id/fragment_place" 
       android:layout_width="fill_parent" 
       android:layout_height="match_parent"/> 

    </LinearLayout> 

//片段代碼 //在這裏你必須編寫代碼,並根據點擊事件你可以替換一個片段

FragmentOne fr = new FragmentOne(); 
    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_place, fr); 
    fragmentTransaction.commit(); 

//你在下一個片段中必須做的相同方式

相關問題