来自ArrayAdapter的getFragmentManager

时间:2013-09-08 23:37:42

标签: android

我的自定义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。我该怎么办?

2 个答案:

答案 0 :(得分:25)

好吧,也许我有点晚了,但也许这会帮助一些人这样做。

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

调用适配器时,请使用扩展FragmentActivity的类

调用它
MyAdapterName = new MyAdapterName(MyClassName.this, Objects);

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

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

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

答案 1 :(得分: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();
}
}

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

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