Android 创建带有片段的ActionBar选项卡+;viepage和recyclerView

Android 创建带有片段的ActionBar选项卡+;viepage和recyclerView,android,android-fragments,android-recyclerview,android-cardview,Android,Android Fragments,Android Recyclerview,Android Cardview,大家好,我是安卓的noob,所以请容忍我 我使用下面的示例创建了一个recyclerview,其中包含四个选项卡式片段,每个片段显示我正在为其创建应用程序的本地团队的列表(卡片视图) 我想在每个片段中添加一个onclicklistener,并尝试使用if position方法,就像我几年前创建类似应用时所做的那样,但get position方法被贬低了 我知道我可以在适配器中放置onviewbind方法,但我被告知这不是最好的方法(我无法使它工作)点击监听器应该放在片段中,因为这允许您重用适配

大家好,我是安卓的noob,所以请容忍我

我使用下面的示例创建了一个recyclerview,其中包含四个选项卡式片段,每个片段显示我正在为其创建应用程序的本地团队的列表(卡片视图)

我想在每个片段中添加一个onclicklistener,并尝试使用if position方法,就像我几年前创建类似应用时所做的那样,但get position方法被贬低了

我知道我可以在适配器中放置onviewbind方法,但我被告知这不是最好的方法(我无法使它工作)点击监听器应该放在片段中,因为这允许您重用适配器,当有人在其中一个片段中进行选择时,我希望在另一个片段中创建另一个列表,该列表将包含一个可扩展的列表

我的适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

private String[] mDataset;

public static class MyViewHolder extends RecyclerView.ViewHolder{
    public CardView mCardView;
    public TextView mTextView;
    public MyViewHolder(View v){
        super(v);

        mCardView = (CardView) v.findViewById(R.id.card_view);
        mTextView = (TextView) v.findViewById(R.id.tv_text);

    }

}

public MyAdapter(String[] myDataset){
    mDataset = myDataset;
}

@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
    MyViewHolder vh = new MyViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position){
    holder.mTextView.setText(mDataset[position]);
}

@Override
public int getItemCount() { return mDataset.length; }
}

我尝试了各种方法来让它工作,但我一直面临着错误或贬值的代码


有人能把我和教程联系起来吗;这将帮助我或帮助我用一些代码来解决这个问题!提前感谢

您可以在适配器中创建一个接口,如使用方法
onItemClicked(int位置)
onItemClickedListener
和适配器中的公共方法
setonitemclickedListener
从片段初始化适配器中的
onItemClickedListener
,在
onBindViewHolder
add
setOnClickListener
中,检查
onItemClickListener
是否不为null,然后调用方法
onItemClicked(int位置)
,代码如下所示

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private String[] mDataset;

    private onItemClickListener onItemClickListener;

    interface onItemClickListener{
        void onItemClicked(int position)
    }

    public void setOnItemClickListener(onItemClickListener 
    onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder{
        public CardView mCardView;
        public TextView mTextView;

        public MyViewHolder(View v){
            super(v);

            mCardView = (CardView) v.findViewById(R.id.card_view);
            mTextView = (TextView) v.findViewById(R.id.tv_text);

        }

    }

    public MyAdapter(String[] myDataset){
        mDataset = myDataset;
    }

    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position){
        holder.mTextView.setText(mDataset[position]);
        holder.mTextView.setOnClickListener(new View.OnClickListener(){
            @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClicked(position);
                    }
                }
        });
    }

    @Override
    public int getItemCount() { return mDataset.length; }

    }

你想做什么?您想让一个侦听器在单击列表中的某个项目时收到通知吗?我想在单击列表中的某个项目时启动另一个活动,然后,我计划使用另一个适配器或同一个采纳者创建另一个列表视图,该列表视图具有可扩展列表,如果可能的话。我尝试了此操作,结果显示无法解析方法setonitemclicklistener匿名视图。查看myadapter中的onclicklistener,无法解析fragmentmy bad中的onclicklister,您必须在适配器上设置OnItemClickListener,在onBindViewHolder中设置OnClickListener,我已经修复了它没有问题我感谢您在MyAdapter类中的帮助它说onBindViewHolder中的intposition应该设置为final当我这样做时,代码是OK的,但在片段中它仍然在这一行上说adapter.setOnItemClickListener(新建MyAdapter.OnItemClickListener)无法解析OnItemClickListener.ya如果要在接口实现中使用变量,则必须是最终变量。是否在MyAdapter中创建了接口,
interface OnItemClickListener{void onItemClicked(int position)}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private String[] mDataset;

    private onItemClickListener onItemClickListener;

    interface onItemClickListener{
        void onItemClicked(int position)
    }

    public void setOnItemClickListener(onItemClickListener 
    onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder{
        public CardView mCardView;
        public TextView mTextView;

        public MyViewHolder(View v){
            super(v);

            mCardView = (CardView) v.findViewById(R.id.card_view);
            mTextView = (TextView) v.findViewById(R.id.tv_text);

        }

    }

    public MyAdapter(String[] myDataset){
        mDataset = myDataset;
    }

    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position){
        holder.mTextView.setText(mDataset[position]);
        holder.mTextView.setOnClickListener(new View.OnClickListener(){
            @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClicked(position);
                    }
                }
        });
    }

    @Override
    public int getItemCount() { return mDataset.length; }

    }
public class BlankFragment extends Fragment {

public BlankFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_blank, container, false);

    RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
    rv.setHasFixedSize(true);
    MyAdapter adapter = new MyAdapter(new String[]{"Example One", "Example Two", "Example Three", "Example Four", "Example Five" , "Example Six" , "Example Seven"});
    rv.setAdapter(adapter);
    adapter.setOnItemClickListener(new MyAdapter.onItemClickListener){
             @Override
            public void onItemClicked(int pos) {
         // DO here what you want ot do on item clicked
            }
    });
    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    rv.setLayoutManager(llm);

    return rootView;
}
}