【问题标题】:RecyclerView List and intent to next activity AndroidRecyclerView 列表和下一个活动的意图 Android
【发布时间】:2015-07-15 11:45:48
【问题描述】:

我已经使用RecyclerView 创建了一个列表,我希望如果用户触摸该列表中的某个项目,它会将用户重定向到另一个activity。注意我在tab 中有list。如何做到这一点?这是我到目前为止所尝试的。

  1. 类列表适配器

公共类 ListAdapter 扩展 RecyclerView.Adapter 实现 View.OnClickListener {

List<ListName> mItems;
public ListAdapter(FragmentActivity c) {
    super();
    mItems = new ArrayList<ListName>();

    ListName nature = new ListName();
    nature.setName("Jose Mourinho");
    nature.setDes("Chelsea Football Club");
    mItems.add(nature);

    nature = new ListName();
    nature.setName("Louis van Gaal");
    nature.setDes("Manchester United");
    mItems.add(nature);

    nature = new ListName();
    nature.setName("Arsene Wenger");
    nature.setDes("Arsenal");
    mItems.add(nature);

    nature = new ListName();
    nature.setName("Manuel Pellegrini");
    nature.setDes("Manchester City");
    mItems.add(nature);

    nature = new ListName();
    nature.setName("Brendan Rodgers");
    nature.setDes("Liverpool CF");
    mItems.add(nature);
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.recyler_view_list, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
    }
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {
    ListName nature = mItems.get(i);
    viewHolder.tvName.setText(nature.getName());
    viewHolder.tvDes.setText(nature.getDes());
    }
    @Override
    public int getItemCount() {

    return mItems.size();
    }

    @Override
    public void onClick(View v) {

    }

    class ViewHolder extends RecyclerView.ViewHolder{

    public TextView tvName;
    public TextView tvDes;
    public ViewHolder(View itemView) {
        super(itemView);
        tvName = (TextView)itemView.findViewById(R.id.txtTitle);
        tvDes = (TextView)itemView.findViewById(R.id.txtSubTitle);
    }
    }

    } 
  1. 类列表名。该类用于设置和获取名称和描述

      public class ListName {
        private String mName;
        private String mDes;
    
       public String getName() {
       return mName;
     }
       public void setName(String name) {
    this.mName = name;
      }
       public String getDes() {
        return mDes;
      }
       public void setDes(String des) {
        this.mDes = des;
      }
    
      } 
    
  2. 类 Tab1。这是 Tab1 的 fragment 类。

     public class Tab1 extends Fragment {
    
     RecyclerView mRecyclerView;
     RecyclerView.LayoutManager mLayoutManager;
     RecyclerView.Adapter mAdapter;
    
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.tab_1, container,      false);
    final FragmentActivity c = getActivity();
    final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    LinearLayoutManager layoutManager = new LinearLayoutManager(c);
    recyclerView.setLayoutManager(layoutManager);
    
    new Thread(new Runnable() {
        @Override
        public void run() {
            final ListAdapter adapter = new ListAdapter(c);
            c.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    recyclerView.setAdapter(adapter);
                }
            });
        }
    }).start();
    
    return view;
    }
    }
    
  3. 类 ViewPagerAdapter 。这个类是adapter 用于标签

     public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    
     CharSequence Titles[]; 
     int NumbOfTabs; 
    
    
    public ViewPagerAdapter(FragmentManager fm, CharSequence mTitles[], int mNumbOfTabsumb) {
    super(fm);
    
    this.Titles = mTitles;
    this.NumbOfTabs = mNumbOfTabsumb;
    
     }
    
    @Override
    public Fragment getItem(int position) {
    
    if (position == 0) // if the position is 0 we are returning the First tab
    {
        Tab1 tab1 = new Tab1();
        return tab1;
    } else             // As we are having 2 tabs if the position is now 0 it must be 1 so we are returning second tab
    {
        Tab2 tab2 = new Tab2();
        return tab2;
    }
    
    }
    
    @Override
    public CharSequence getPageTitle(int position) {
       return Titles[position];
    }
    

    //此方法返回标签条的标签数

    @Override
    public int getCount() {
      return NumbOfTabs;
    }
    }
    

【问题讨论】:

    标签: java android android-studio android-recyclerview


    【解决方案1】:

    在 Viewholder 中的 itemView 上放置一个 setOnClickListener 并编写代码以转到另一个活动(意图)

    class ViewHolder extends RecyclerView.ViewHolder
    {
    
    public TextView tvName;
    public TextView tvDes;
    
        public ViewHolder(View itemView) 
        {
            super(itemView);
            tvName = (TextView)itemView.findViewById(R.id.txtTitle);
            tvDes = (TextView)itemView.findViewById(R.id.txtSubTitle);
    
            itemView..setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                         Intent intent = new Intent(getActivity().getApplicationContext(), ActivityName.class);
                         startActivity(intent); //or startActivityForResult(REQUEST, intent);
                    }
                });
    
        }
    }
    

    【讨论】:

    • 我在 getActivity().getApplicationContext 和 startActivity(intent) 处遇到错误。这是因为它无法解析getActivity和startActivity。如何解决?谢谢
    • 它是带括号的 getActivity().getApplicationContext() ..(或者您可以尝试 ActivityName.this 代替)并且通常解决 startActivity 应该不会出现问题
    • 我试过了,还是报错'Cannot resolve method getActivity()' 是不是有什么我没申请的?
    • 您需要在片段中使用 getActivity().getApplicationContext() 来获取活动的上下文。当你在你的活动中,那么你就可以使用'this'来调用它的上下文
    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多