2016-10-10 118 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(); 

//你在下一个片段中必须做的相同方式

相关问题