【问题标题】:Click on tab itemes response from next tab items单击来自下一个选项卡项的选项卡项响应
【发布时间】:2016-09-18 05:49:59
【问题描述】:

我有一个片段与片段寻呼适配器实现 tablayout...每个选项卡都有一个带有一些项目的回收器视图(所有回收器视图的相同回收器视图适配器)...通过实现 OnItemClick 侦听器以单击每个项目调用一个活动使用 fragmentStatePagerAdapter 实现一个 viewpager,以显示回收器视图项...基于 tablayout viewpager 的滑动显示上一个或下一个选项卡项... 每个项目的数据存储在一个数组列表中。 当我单击当前选项卡中的一个项目时,它就像我单击同一位置的下一个选项卡项目 tablayput 片段:

 viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    //setupViewPager(viewPager);
    MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getChildFragmentManager(),getActivity());

    adapter.addFrag(new OneFragment(), "title1");
    adapter.addFrag(new TwoFragment(), "title2");
    adapter.addFrag(new ThreeFragment(), "title3");
    viewPager.setAdapter(adapter);
    tabLayout = (TabLayout) view.findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

OneFragment 和 TwoFragment 和 ... 类似:

rv=(RecyclerView) view.findViewById(R.id.rv);

        StaggeredGridLayoutManager sglm = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        rv.setLayoutManager(sglm);
        rv.setHasFixedSize(true);
persons = new ArrayList<>();



          persons.add(new Person("name", "age","email","phone","resume", R.drawable.photo));
     persons.add(new Person("name", "age","email","phone","resume", R.drawable.photo));
    .
    .
    .      

 for (int j=0; j < persons.size() ;j++){
            PersonItem personItem = new PersonItem();
            personItem.setName(persons.get(j).name);
            personItem.setAge(persons.get(j).age);
            personItem.setEmail(persons.get(j).email);
            personItem.setPhone(persons.get(j).phone);
            personItem.setResume(persons.get(j).resume);
            personItem.setImageId(persons.get(j).photoId);
            personList1.addItem(personItem);

 RVAdapter adapter = new RVAdapter(getContext(),persons);


        adapter.setOnItemClickListener(new RVAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                int pos = position;



                Bundle bundle = new Bundle();
                bundle.putSerializable("person", personList1);
                Intent intent = new Intent(getContext(),
                        MyActivity.class);
                intent.putExtras(bundle);
                intent.putExtra("pos", pos);

                startActivity(intent);

            }

        });
        rv.setAdapter(adapter);

回收器视图适配器:

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
    private Context mContext;
    private static OnItemClickListener listener;

   //AdapterView.OnItemClickListener listener;
    // Define the listener interface
    public interface OnItemClickListener {
        void onItemClick(View itemView, int position);
    }
    // Define the method that allows the parent activity or fragment to define the listener
    public void setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener;
    }


    public static class PersonViewHolder extends RecyclerView.ViewHolder {

        CardView cv;
        TextView personName;
        TextView personAge;
        ImageView personPhoto;

        PersonViewHolder(final View itemView) {
            super(itemView);
            cv = (CardView)itemView.findViewById(R.id.cv);
            personName = (TextView)itemView.findViewById(R.id.person_name);
            personAge = (TextView)itemView.findViewById(R.id.person_age);
            personPhoto = (ImageView)itemView.findViewById(R.id.person_photo);

            // Setup the click listener
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Triggers click upwards to the adapter on click
                    if (listener != null)
                        listener.onItemClick(itemView, getLayoutPosition());
                }
            });
        }
    }

    List<Person> persons;

    public RVAdapter(Context context , List<Person> persons){
        this.persons = persons;
        mContext = context;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
        PersonViewHolder pvh = new PersonViewHolder(v);
        return pvh;
    }

    @Override
    public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
        personViewHolder.personName.setText(persons.get(i).name);
        personViewHolder.personAge.setText(persons.get(i).age);
        personViewHolder.personPhoto.setImageResource(persons.get(i).photoId);
    }

    @Override
    public int getItemCount() {
        return persons.size();
    }
}

【问题讨论】:

    标签: android-fragments android-viewpager android-recyclerview onclicklistener android-tablayout


    【解决方案1】:

    为了解决这个问题,我将我的 RvAdapter 类作为每个选项卡片段中的内部和私有类:

     private static class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
    
     //...and keep remaning 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多