我在Android中玩碎片。
我知道我可以通过使用以下代码更改一个片段:
FragmentManager fragMgr = getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();
MyFragment myFragment = new MyFragment(); //my custom fragment
fragTrans.replace(android.R.id.content, myFragment);
fragTrans.addToBackStack(null);
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragTrans.commit();
我的问题是,在Java文件中,如何获得当前显示的片段实例?
我认为你们想知道u在哪个片段中
我想有一个解决办法,但我认为它不是最好的
但这是可行的
首先
你应该创建你的父片段,它扩展fragment
public class Fragment2 extends Fragment {
private static position;
public static int getPosition() {
return position;
}
public static void setPosition(int position) {
FragmentSecondParent.position = position;
}
}
第二个
你应该在每个片段和每次写入onCreateView中扩展它
setPosition(//your fragmentposition here)
第三
你想在哪里得到当前的片段,你应该
写这篇文章
Fragment2 fragment= (Fragment2) getSupportFragmentManager()
.findFragmentById(R.id.fragment_status);
int position = fragment.getPosition();
if(//position condition)
{
//your code here
}
在你的活动中,在创建之前初始化你的片段
MyFragment myFragment = new MyFragment(); // add this
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
........
然后调用该方法来查看您的片段
openFragment(this.myFragment);
这是方法
(R.id.frame_container)是xml文件中的片段容器id
(框架布局)
private void openFragment(final Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.frame_container, fragment);
transaction.commit();
}
那么在你的活动中,Override方法应该是这样的
public void onBackPressed() {
if (myFragment.isVisible()) {
myFragment.onBackPressed(this);
return;
}
super.onBackPressed();
}
然后在你的片段中放入这个方法
public void onBackPressed(Activity activity) {
Toast.makeText(activity, "Back Pressed inside Fragment", Toast.LENGTH_SHORT).show();
}