Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从回收器视图适配器的setOnClick侦听器内启动活动_Android_Android Recyclerview - Fatal编程技术网

Android 无法从回收器视图适配器的setOnClick侦听器内启动活动

Android 无法从回收器视图适配器的setOnClick侦听器内启动活动,android,android-recyclerview,Android,Android Recyclerview,我用grid layout manager实现了一个recycler视图来创建一个类别列表。现在,基本上我已经尝试在OnCreateViewholder方法中的holder中实现一个setOnClick侦听器。在运行代码时,我遇到了这个错误 android.util.AndroidRuntimeException:从活动上下文外部调用startActivity()需要标志_Activity_NEW_TASK标志。这真的是你想要的吗 这是我的适配器代码 package com.paaltao.Ad

我用grid layout manager实现了一个recycler视图来创建一个类别列表。现在,基本上我已经尝试在OnCreateViewholder方法中的holder中实现一个setOnClick侦听器。在运行代码时,我遇到了这个错误

android.util.AndroidRuntimeException:从活动上下文外部调用startActivity()需要标志_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);

        }
    }
}
package com.paaltao.Adapters;
导入android.content.Context;
导入android.content.Intent;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
进口公司paaltao.R;
导入com.paaltao.activity.ProductDetailsActivity;
导入com.paaltao.classes.Category;
导入java.util.Collections;
导入java.util.List;
/**
*由Arindam于2015年2月2日创建。
*/
公共类CategoryAdapter扩展了RecyclerView.Adapter{
私人语境;
私人充气机;
私人视野;
List data=Collections.emptyList();
公共类别适配器(上下文、列表数据){
这个数据=数据;
this.context=context;
}
@凌驾
public CategoryHolder onCreateViewHolder(视图组父级,int-viewType){
充气器=LayoutInflater.from(parent.getContext());
视图=充气机。充气(R.layout.category_卡,父级,假);
类别文件夹持有者=新类别文件夹(视图);
holder.categoryImage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(上下文、ProductDetailsActivity.class);
背景。开始触觉(意图);
}
});
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(类别文件夹持有人,内部位置){
类别当前=数据获取(位置);
holder.categoryName.setText(current.getCategory_name());
holder.categoryImage.setImageResource(current.getCategory_id());
}
@凌驾
public int getItemCount(){
返回data.size();
}
类CategoryHolder扩展了RecyclerView.ViewHolder{
TextView类别名称;
图像视图类别图像;
公共类别文件夹(视图项视图){
超级(项目视图);
categoryImage=(ImageView)itemView.findViewById(R.id.category\u图像);
categoryName=(TextView)itemView.findViewById(R.id.category\u名称);
}
}
}

私有上下文中的上下文很可能不是活动上下文。初始化活动时,需要将其作为CategoryAdapter的第一个参数传递:
CategoryAdapter adapter=new CategoryAdapter(活动,数据)

图像视图将位于类似Relativelayout或Linearlayout的布局中。现在获取它并将其放入holder中,然后在布局上设置ClickListener。也只需发布布局文件。这种方法不容易受到上下文泄漏的影响吗?有更好的方法吗?@Amit0191有更好的方法。您需要在适配器上实现一个单击侦听器,并在活动中调用它。最好在活动中实现所有单击事件,而不是在适配器中实现。