【问题标题】:How to open different activities with Recycle view items using on click listeners如何使用 onclick 侦听器打开带有 Recyclerview 项目的不同活动
【发布时间】:2018-10-10 06:48:13
【问题描述】:

如何使用点击监听器打开不同的活动与回收视图项目。帮助我,我是初学者。 我的代码是

主要活动:

【问题讨论】:

标签: android android-recyclerview onclick onclicklistener


【解决方案1】:

解决方案。

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private ArrayList<String> countries;

public DataAdapter(ArrayList<String> countries) {
    this.countries = countries;
}

@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardlay, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, final int i) {

    viewHolder.tv_country.setText(countries.get(i));
    viewHolder.tv_country.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context context = v.getContext();
            if(countries.get(i).equalsIgnoreCase("India")){
                Intent intent= new Intent(context, First.class);
                context.startActivity(intent);
            }

            else if(countries.get(i).equalsIgnoreCase("Germany")){
                Intent intent= new Intent(context, Second.class);
                context.startActivity(intent);
            }
        }
    });
}

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

public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView tv_country;
    public ViewHolder(View view) {
        super(view);

        tv_country = (TextView)view.findViewById(R.id.tv_country);
    }
}

}

【讨论】:

    【解决方案2】:
    viewHolder.tv_country.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                if(countries.get(i).equalsIgnoreCase("India")){
    
                   // open activiy here
                }
    
                else if(countries.get(i).equalsIgnoreCase("Germany")){
                   // open activiy here
                }
    
                .
                .
                .
        });
    

    【讨论】:

    • 谢谢,但它不会用于其他活动。显示错误:尝试在空对象上调用虚拟方法'java.lang.String android.content.Context.getPackageName()' 参考我的意图代码 Intent intent= new Intent(context, First.class); context.startActivity(intent);
    • "我很乐意为您提供帮助。
    【解决方案3】:

    在adapterdatalist 中发送Activity 名称。并在 OnClickListener 中通过调用 startMyActivity 方法启动活动,如下所示:

    holder.itemView.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
                  startMyActivity(dataSet.get(listPosition));
           }
                        });
    

    这里的数据集是我的活动名称列表。下面是按名称调用活动的代码

     private void startMyActivity(String ActivityName){
            String activityToStart = ActivityName;
            try {
                Class<?> c = Class.forName(activityToStart);
                Intent intent = new Intent(mContext, c);
                mContext.startActivity(intent);
            } catch (ClassNotFoundException ignored) {
                Log.e("no activity","Activity not found");
            }
        }
    

    【讨论】:

      【解决方案4】:

      在您的视图(Activity/Fragment)中实现一个接口并将其传递给 RecyclerView 构造函数。然后在视图 onclick 事件上调用接口的方法并处理您的活动或片段中的点击。

      例如-

      public YourAdapter( ArrayList<RESULT> list, IRecyclerItemClickListener listener) {
          this.list = list;
          this.listener = listener;
      }
      

      在 ViewHolder 中

      yourView.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
          listener.onclik(yourview,position);
      }
      

      在您实施的 Activity 或 Fragment 中

      @Override
      public void onViewClicked(View view,int position) {
      
          switch(view.getId()){
           case R.id.yourview:startActivity(new Intent(this,ActivityB.class))
       }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多