【问题标题】:How to startActivity within RecyclerView CustomAdapter如何在 RecyclerView CustomAdapter 中启动Activity
【发布时间】:2022-02-03 11:22:26
【问题描述】:

我想将 startActivity() 添加到我的 CustomAdapter 类中的 onClick 侦听器中。

CustomAdapter.java:

import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

import static androidx.core.content.ContextCompat.startActivity;

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
    private List<String> data;
    public CustomAdapter (List<String> data){
        this.data = data;
    }

    @Override
    public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View rowItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_view, parent, false);
        return new ViewHolder(rowItem);
    }

    @Override
    public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) {
        holder.textView.setText(this.data.get(position));
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView textView;

        public ViewHolder(View view) {
            super(view);
            view.setOnClickListener(this);
            this.textView = view.findViewById(R.id.textview);
        }

        @Override
        public void onClick(View view) {
           startActivity(new Intent(CustomAdapter.this, LoginActivity.class));
        }
    }
}

问题是我的 IDE 中出现以下错误:

Cannot resolve constructor 'Intent(com.kenadams.app.CustomAdapter, java.lang.Class<com.kenadams.app.LoginActivity>)'

最初,我认为这是因为我的CustomAdapter 课程是static。所以,我使它成为非静态的。但是,问题仍然存在。请指导我实现这个意图。

【问题讨论】:

    标签: java android android-recyclerview


    【解决方案1】:

    在您的客户适配器类中,您需要使用构造函数获取上下文。

    private Context mcon;
    

    在构造函数中->

    public CustomAdapter (Context _mcon, List<String> data){
    
    this.mcon = _mcon;
        this.data = data;
    }
    

    然后在onClickListener->

    @Override
            public void onClick(View view) {
        mcon.startActivity(new Intent(mcon, LoginActivity.class));
    
            }
    

    【讨论】:

      【解决方案2】:

      而不是CustomAdapter.this startActivity(new Intent(CustomAdapter.this, LoginActivity.class));

      使用您正在使用适配器的 Activity 上下文。

      但是开始另一个活动的正确方式应该是从活动开始。也许您可以在 ViewHolder 中调用您的活动的方法。这将开始您想要的活动

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-10
        • 1970-01-01
        • 2014-05-04
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        相关资源
        最近更新 更多