大佬教程收集整理的这篇文章主要介绍了Android如何从listview元素打开片段,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的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; }
问题是在替换的第二个参数中,我有错误,它必须是片段(我确定TrainersInfo()是片段,因为我在其他地方使用它,它的工作原理).
如何通过单击另一个片段中的lise元素来解决此问题或打开片段的最佳方法是什么?
更好然后替换适配器内的Fragment就是说你应该替换片段的活动.这可以通过您在Activity中实现的界面来完成:
public class TrainerGroupsAdapter extends ArrayAdapter { // ThE interface which you have to implement in your activity public interface OnChangeFragmentListener { void changeFragment(); } List list = new ArrayList(); private OnChangeFragmentListener m_onChangeFragmentListener; public TrainerGroupsAdapter(Context context,resourcE); m_onChangeFragmentListener = (OnChangeFragmentListener) context; } // Your other code }
getView方法中的OnClickListener:
handler.ll.setOnClickListener(new View.onClickListener() { @Override public void onClick(View v) { // Call the method which change the fragment m_onChangeFragmentListener.changeFragment(); } });
活动:
public class MainActivity extends AppCompatActivity implements TrainerGroupsAdapter.onChangeFragmentListener { //... // Your Other code // Implement the method which is called in the adapter and replace the fragment here @Override public void changeFragment() { getFragmentManager().begintransaction().replace(R.id.MainContainer,new TrainerInfo()).addToBACkStack(null).commit(); } }
#updatE1
您需要getSupportFragmentManager()和getFragmentManager()的活动上下文.
您可以将构造函数的Context参数更改为Activity,并在类中为该活动创建一个成员变量,以便以后使用它:
public class TrainerGroupsAdapter extends ArrayAdapter { List list = new ArrayList(); private Activity m_activity; public TrainerGroupsAdapter(Activity context,resourcE); m_activity = context; } // Your other code }
getView方法中的OnClickListener:
handler.ll.setOnClickListener(new View.onClickListener() { @Override public void onClick(View v) { m_activity.getFragmentManager().begintransaction().replace(R.id.MainContainer,new TrainerInfo()).addToBACkStack(null).commit(); } });
以上是大佬教程为你收集整理的Android如何从listview元素打开片段全部内容,希望文章能够帮你解决Android如何从listview元素打开片段所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。