android-fragments 如何替换BaseAdapter中的片段?

lg40wkob  于 2022-11-14  发布在  Android
关注(0)|答案(4)|浏览(135)

我的适配器:

public class MyAdapter extends BaseAdapter {
    ...
    public View getView(int position, View convertView, ViewGroup parent) {
    View view = mLayoutInflater.inflate(R.layout.my_listview_item, null);

    TextView myTv = (TextView) view.findViewById(R.id.myTv);
    myTv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // I want to replace another fragment
        }
    });

    return view;
}

我在stackoverflow中找不到解决方案...
我可以替换一个片段吗??帮帮我..

axr492tv

axr492tv1#

从适配器类调用fragment有两种方法:
1)你可以为它做一个接口。
2)您可以使用特定操作注册自己的BroadcastReceiver
直接从按钮点击调用片段不是一个好的和正确的,干净的方式。所以我只是要张贴我的第二种方法的答案。
在适配器类中单击On按钮

context.sendBroadcast(new Intent("call.myfragment.action"))

这在android中是很简单的事情,就是通过发送广播消息。

urButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        context.sendBroadcast(new Intent("call.myfragment.action"))

    }
});

现在,在您的活动中,您只需要向"call.myfragment.action"注册一个BroadcastReceiver,这就是它的内部内容,只需调用您的片段:

context.registerReceiver(mBroadcastReceiver, new IntentFilter("call.myfragment.action")) // This code is in your Activity will be in onCreate() or in onResume() method.

BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        // Now just call your Fragment here now.
    }
};
6xfqseft

6xfqseft2#

你有两个办法:
1-将您的片段或Activity传递给您的适配器并引用它。在onClick()方法中,使用它来替换片段。
2-用一个BroadcastReceiver来替换这个片段,然后在onClick()方法中,简单地发送一个BroadCast。

63lcw9qa

63lcw9qa3#

你可以使用片段管理器来弹出或替换你的片段.片段与活动绑定,

FragmentTransaction  trans = mStack.getInstance().beginTransaction();

trans.replace(R.id.fragment_container, mFragment,
      mFragment.getCustomTag());

   trans.addToBackStack(mFragment.getCustomTag())
         .commitAllowingStateLoss();
getSupportFragmentManager().executePendingTransactions();
mStack.setTopFragment(mFragment, mFragment.getCustomTag());
2g32fytz

2g32fytz4#

在类适配器中添加此属性并在构造函数中初始化:

private FragmentActivity fragmentActivity;

在初始化适配器时,添加getActivity():

YourAdapter yourAdapter = new YourAdapter(getContext(), this.myList, getActivity());

在类适配器中单击侦听器方法:

public void onClick(View view) {
                fragmentActivity.getSupportFragmentManager().beginTransaction().
                        remove(fragmentActivity.getSupportFragmentManager().findFragmentById(R.id.frame)).commit();
                YourFragment frag = new YourFragment();
                fragmentActivity.getSupportFragmentManager().beginTransaction().add(R.id.frame, frag).commit();
        }
    });

工作完美!

相关问题