【问题标题】:Unable to start activity from within setOnClick Listener of Recycler View adapter无法从 Recyclerview 适配器的 setOnClickListener 中启动活动
【发布时间】:2015-02-18 19:18:55
【问题描述】:

我已经使用网格布局管理器实现了一个回收器视图来创建一个类别列表。现在基本上我已经尝试在 OnCreateViewholder 方法中的持有人中实现 setOnClick 侦听器。运行代码时出现此错误

android.util.AndroidRuntimeException:从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?

这是我的适配器代码

package com.paaltao.Adapters;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.paaltao.R;
import com.paaltao.activity.ProductDetailsActivity;
import com.paaltao.classes.Category;

import java.util.Collections;
import java.util.List;

/**
 * Created by Arindam on 02-Feb-15.
 */
public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.CategoryHolder> {
    private Context context;
    private LayoutInflater inflater;
    private View view;
    List<Category> data = Collections.emptyList();

    public CategoryAdapter(Context context ,List<Category> data){
        this.data = data;
        this.context= context;
    }
    @Override
    public CategoryHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        inflater = LayoutInflater.from(parent.getContext());

        view = inflater.inflate(R.layout.category_card, parent, false);


        CategoryHolder holder = new CategoryHolder(view);
        holder.categoryImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context,ProductDetailsActivity.class);
                context.startActivity(intent);

                }
        });
        return holder;
    }

    @Override
    public void onBindViewHolder(CategoryHolder holder, int position) {

        Category current = data.get(position);
        holder.categoryName.setText(current.getCategory_name());
        holder.categoryImage.setImageResource(current.getCategory_id());

    }

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

    class CategoryHolder extends RecyclerView.ViewHolder {
        TextView categoryName;
        ImageView categoryImage;

        public CategoryHolder(View itemView) {
            super(itemView);

            categoryImage = (ImageView) itemView.findViewById(R.id.category_image);
            categoryName = (TextView) itemView.findViewById(R.id.category_name);

        }
    }
}

【问题讨论】:

  • 图像视图将位于相对布局或线性布局等布局中。现在得到它并将它放在布局上的 holder 和 setonclicklistener 中。也只需发布您的布局文件。

标签: android android-recyclerview


【解决方案1】:

private Context context; 中的上下文很可能不是活动上下文。您需要在初始化时将您的活动作为 CategoryAdapter 的第一个参数传递:CategoryAdapter adapter = new CategoryAdapter(activity, data);

【讨论】:

  • 这种方法是否容易受到上下文泄漏的影响?有更好的方法吗?
  • @Amit0191 是的,有更好的方法。您在适配器上实现点击侦听器并在您的活动中调用它。最好在一个 Activity 中而不是在适配器中实现所有点击事件。
猜你喜欢
  • 2012-07-08
  • 2018-11-07
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
相关资源
最近更新 更多