提问者:小点点

添加新片段后,上一个片段元素仍然处于活动状态


用这张图片可以更好地描述我的问题。当我在第一个片段(第一张图片)上添加第二个片段(第二张图片)时,第一个片段元素(Spner,EditText)仍然是活动的。活动意味着触摸相同的地方,我可以看到下拉列表正在下降。

我无法替换片段,因为我需要回到用户离开第一个片段的相同状态。有人能告诉我有什么问题吗?

我使用广播添加第二个片段,因为它需要从baseAdapter listview调用。代码是这样的。

列表视图onclick

view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) 
        {
            Log.v("TAG", "Clicked: " + itemListPogo.get(position).getitemIdplato());

            Intent i = new Intent("start.fragment.action");
            i.putExtra("plateId", itemListPogo.get(position).getitemIdplato());
            mContext.sendBroadcast(i);
        }
    });

旋转

    mBroadcastReceiver = new BroadcastReceiver() 
    {
        @Override
        public void onReceive(Context context, Intent intent) 
        {
            Bundle extra = intent.getExtras();
            String plateId = extra.getString("plateId");  

            Fragment fragment = new PlateDetailsFragment(DashBoardActivity.this, Integer.parseInt(plateId));
            FragmentManager fragmentManager = (DashBoardActivity.this).getFragmentManager();
            fragmentManager.popBackStack("back", FragmentManager.POP_BACK_STACK_INCLUSIVE);

            fragmentManager.beginTransaction().add(R.id.frame_container, fragment).addToBackStack(plateId).commit();
        }
    };
    this.registerReceiver(mBroadcastReceiver, new IntentFilter("start.fragment.action"));


共2个答案

匿名用户

有一个简单的技巧。取顶部片段的主容器/父视图,并为其添加一个onClickListener。不要在onClick中做任何事情。这样你顶部的片段将捕获用户点击。希望它足够清晰。

示例-如果您的片段布局具有Linear布局作为父级,请在片段代码中为其分配onClickListener,就像为按钮分配一样。

匿名用户

您应该删除以前的片段。

尝试使用此代码:

public static void insertFragment(Context context, int resId, Class<? extends Fragment> clazz, Bundle args, boolean stack)
    {
        if (context != null)
        {
            FragmentManager manager = ((FragmentActivity) context).getSupportFragmentManager();
            FragmentTransaction tx = manager.beginTransaction();

            if (stack)
            {
                tx.addToBackStack(null);
            }
            else
            {
                Fragment fragment = manager.findFragmentById(resId);
                if (fragment != null)
                    tx.remove(fragment);
            }
            tx.add(resId, Fragment.instantiate(context, clazz.getName(), args));
            tx.commitAllowingStateLoss();
        }
    }