【问题标题】:How to open a new activity from the adapter?如何从适配器打开新活动?
【发布时间】:2020-06-05 06:23:56
【问题描述】:

原来代码的格式如下:

   @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);
        }
    }
}
  • 列表项

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

【问题讨论】:

    标签: java android android-recyclerview start-activity


    【解决方案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));
            }
        });
    }
    

    【讨论】:

    • 点击监听器中的View.getActivity()会有什么问题?
    • @NjugunaMureithi 它可能会产生 null 。
    • 赚了,谢谢!但我不得不改变 - context.startActivity (new Intent (this, Information.class)); ... on - context.startActivity (new Intent (context, Information.class));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 2018-07-18
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多