有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从适配器打开新活动?

事实证明,代码的形式如下:

   @Override
    public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
        final Phone phone = phones.get(position);
        holder.imageView.setImageResource(phone.getImage());
        holder.nameView.setText(phone.getName());
        holder.companyView.setText(phone.getCompany());
        holder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("click: ", phone.getClickbutton());
                startActivity(new Intent(this, Information.class));
            }
        });
    }

分别是:

startActivity(new Intent(this, Information.class));

她不想在这里工作

我给出了完整的适配器代码:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {

    private LayoutInflater inflater;
    private List<Phone> phones;

    public DataAdapter(Context context, List<Phone> phones) {
        this.phones = phones;
        this.inflater = LayoutInflater.from(context);
    }
    @Override
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = inflater.inflate(R.layout.list_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
        final Phone phone = phones.get(position);
        holder.imageView.setImageResource(phone.getImage());
        holder.nameView.setText(phone.getName());
        holder.companyView.setText(phone.getCompany());
        holder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("click: ", phone.getClickbutton());
                startActivity(new Intent(this, Information.class));
            }
        });
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        final ImageView imageView;
        final TextView nameView, companyView;
        final Button button;
        ViewHolder(View view){
            super(view);
            imageView = (ImageView)view.findViewById(R.id.image);
            nameView = (TextView) view.findViewById(R.id.name);
            companyView = (TextView) view.findViewById(R.id.company);
            button = (Button) view.findViewById(R.id.button);
        }
    }
}
  • 列表项

这才是真正的问题。如何从适配器打开新活动。。。谢谢


共 (1) 个答案

  1. # 1 楼答案

    不要将传递的上下文处理到适配器

    public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    
    private LayoutInflater inflater;
    private List<Phone> phones;
    private Context context;
    
    public DataAdapter(Context context, List<Phone> phones) {
        this.context = context;
        this.phones = phones;
        this.inflater = LayoutInflater.from(context);
    }
    // Remainder code
    }
    

    然后使用context开始新的活动

    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
        final Phone phone = phones.get(position);
        holder.imageView.setImageResource(phone.getImage());
        holder.nameView.setText(phone.getName());
        holder.companyView.setText(phone.getCompany());
        holder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("click: ", phone.getClickbutton());
                context.startActivity(new Intent(this, Information.class));
            }
        });
    }