我的自定义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。我该怎么办?
答案 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();
}
}
在这里,您需要将您的活动作为上下文传递给适配器。
希望它会帮助某人......