Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android如何从listview元素打开片段大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在MainActivity中是FrameLayout MainContainer.我在那里加载一个片段TrainerMyGroups,有一个Listview,我在其中使用TrainerGroupsAdapter添加一些元素(每个元素都有一些字符串).实际上我想通过点击list的元素来替换片段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;
}

问题是在替换的第二个参数中,我有错误,它必须是片段(我确定TrainersInfo()是片段,因为我在其他地方使用它,它的工作原理).
如何通过单击另一个片段中的lise元素来解决此问题或打开片段的最佳方法是什么?

解决方法@H_404_26@
#updatE2

更好然后替换适配器内的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,请注明来意。