在
我的
MainActivity
中有一个名为MainContainer
的FrameLayout。我在那里加载一个名为TrainerMyGroups
的片段,其中有一个Listview,在那里我通过使用TrainerGroupsAdapter
添加了一些元素(每个元素都有一些字符串)。实际上,我想通过单击列表元素来替换片段TrainerMyGroups
为另一个片段(例如TrainersInfo
)。我的
TrainerGroupsAdapter
如下:public class TrainerGroupsAdapter extends ArrayAdapter {
List list = new ArrayList();
public TrainerGroupsAdapter(Context context, int resource) {
super(context, resource);
}
static class Datahandler{
TextView name;
TextView when;
TextView where;
LinearLayout ll;
}
@Override
public void add(Object object) {
super.add(object);
list.add(object);
}
@Override
public int getCount() {
return this.list.size();
}
@Override
public Object getItem(int position) {
return this.list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
row=convertView;
Datahandler handler;
SharedPreferences pref = getContext().getSharedPreferences("pref", Context.MODE_PRIVATE);
if(convertView==null){
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row= inflater.inflate(R.layout.list_mygroups,parent,false);
handler = new Datahandler();
handler.name = (TextView) row.findViewById(R.id.trainermygroupslistname);
handler.where = (TextView) row.findViewById(R.id.trainermygroupslistwhere);
handler.when = (TextView) row.findViewById(R.id.trainermygroupslistwhen);
handler.ll=(LinearLayout) row.findViewById(R.id.trainermygroupslistlayout);
row.setTag(handler);
}
else {
handler = (Datahandler)row.getTag();
}
TrainerGroupsDataProvider dataProvider;
dataProvider = (TrainerGroupsDataProvider)this.getItem(position);
handler.name.setText(dataProvider.getName());
handler.when.setText(dataProvider.getWhen());
handler.where.setText(dataProvider.getWhere());
handler.ll.setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + dataProvider.getColor()));
handler.ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().beginTransaction().replace(R.id.MainContainer, new TrainerInfo()).addToBackStack(null).commit();
}
});
return row;
}
}
它没起作用,但方法OnClick可能是好的,因为如果我将getFragmentManager().beginTransaction().replace(R.id.MainContainer, new TrainerInfo()).addToBackStack(null).commit();
替换为更改一些字符串(名称,tc时)的代码,它可以工作。问题在于getFragmentMenager()
,Android Studio显示消息提示我必须创建Getter,并且AS的建议是在OnClick方法中生成:
private FragmentManager fragmentManager;
public FragmentManager getFragmentManager() {
return fragmentManager;
}
问题出在replace
的第二个参数上,我收到了一个错误提示,说它必须是Fragment(我确定TrainersInfo()
是Fragment,因为我在其他地方使用过它并且它可以工作)。
我该如何解决这个问题或者在另一个fragment中点击列表元素后打开fragment的最佳方法是什么?