7

我有一个来自我的自定义 ArrayAdapter 的 listView。在每个视图中都有一个按钮。单击按钮时,我想更改当前片段。这是我的代码:

public class CheckInSArrayAdapter extends ArrayAdapter<JSONObject> {


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getViewOptimize(position, convertView, parent);
    }

    public View getViewOptimize(int position, View convertView, ViewGroup parent) {

    ......

        viewHolder.commentBtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

            ??? <<<<<

        });

        return convertView;
    }

    private class ViewHolder {
        ...       
        public Button commentBtn;
    }

}

所以现在,我不能从 OnClickListener 调用 getFragmentManager。我能怎么做?

4

2 回答 2

25

好的,也许我有点晚了,但也许它会帮助一些人做到这一点。

在调用适配器的类中,需要扩展或实现“FragmentActivity”。然后你的 Activity 将包含一个 fragmentManager。

当您调用适配器时,使用扩展 FragmentActivity 的类调用它

MyAdapterName = new MyAdapterName(MyClassName.this, Objects);

然后在 getView() 中的适配器中执行此操作。

final Context context = parent.getContext();
FragmentManager fm = ((Activity) context).getFragmentManager();

小心使用好的 android FragmentManager - android.app.FragmentManager 不是 android.support.v4.app.FragmentManager;

于 2015-03-31T13:35:00.337 回答
4

这么晚了,但这里没有人回答这个问题。

您可以使用 getview 方法调用片段管理器

FragmentManager fm = ((Activity)context).getFragmentManager(); 

getFragmentManager() 是 Activity 类的方法。

例如

holder.tvBuy.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View v) 
{
    // TODO Auto-generated method stub
     Fragment fragment;
     fragment = new Buy();
    ((Activity)context).getFragmentManager().beginTransaction().replace(R.id.content_frame,fragment).commit();
}
}

在这里,您需要将您的活动作为上下文传递给您的适配器。

希望它会帮助某人....

于 2014-08-06T13:28:44.057 回答