Android DataAdapter中的空指针异常

Android DataAdapter中的空指针异常,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,我需要一个用于多重和不同布局的RecyclerView,我无法解决此错误 错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.ImageView.setImageResource(int)” 错误代码 ((ViewHolder1)holder.mIdView.setImageResource(((ViewHolder1)holder.mItem.id) 数据适配器 package krishidarshan;

我需要一个用于多重和不同布局的RecyclerView,我无法解决此错误

错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.ImageView.setImageResource(int)”

错误代码

((ViewHolder1)holder.mIdView.setImageResource(((ViewHolder1)holder.mItem.id)

数据适配器

package krishidarshan;

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 java.util.List;

import krishidarshan.dummy.DummyContent.DummyItem;

/**
* Created by Abhishek on 19-03-2017.
*/

public class DataAdapter extends   RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final List<DummyItem> mValues;
int type;


public DataAdapter(List<DummyItem> items, int layoutType) {
    mValues = items;
    type = layoutType;
}

@Override
public int getItemViewType(int position) {
    return type;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == 1) {
        View view1 = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_view, parent, false);
        return new ViewHolder1(view1);
    } else {
        View view2 = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.fragment_crops, parent, false);
        return new ViewHolder2(view2);
    }
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    if (holder instanceof ViewHolder1) {
        ((ViewHolder1) holder).mItem = mValues.get(position);
        ((ViewHolder1) holder).mIdView.setImageResource(((ViewHolder1) holder).mItem.id);
        ((ViewHolder1) holder).mIdView.setImageResource(((ViewHolder1) holder).mItem.id);
        ((ViewHolder1) holder).mContentView.setText(((ViewHolder1) holder).mItem.content);

    } else if (holder instanceof ViewHolder2) {
        ((ViewHolder2) holder).mItem = mValues.get(position);
        ((ViewHolder2) holder).mIdView.setImageResource(((ViewHolder2) holder).mItem.id);
        ((ViewHolder2) holder).mContentView.setText(((ViewHolder2) holder).mItem.content);
        ((ViewHolder2) holder).mContentDetailView.setText(((ViewHolder2) holder).mItem.content_detail);
    }
}

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


public class ViewHolder1 extends RecyclerView.ViewHolder {
    public final View mView;
    public final ImageView mIdView;
    public final TextView mContentView;
    public final Context mContext;
    public DummyItem mItem;

    public ViewHolder1(final View view) {
        super(view);
        mView = view;
        mContext = view.getContext();
        mIdView = (ImageView) view.findViewById(R.id.id);
        mContentView = (TextView) view.findViewById(R.id.content);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();
                switch (position) {
                    case 0:
                        Intent i = new Intent(mContext, CropsActivity.class);
                        mContext.startActivity(i);
                        break;
                    case 1:
                        Intent i1 = new Intent(mContext, WeatherActivity.class);
                        mContext.startActivity(i1);
                }
            }
        });

    }

    @Override
    public String toString() {
        return super.toString() + " '" + mContentView.getText() + "'";
    }

}

public class ViewHolder2 extends RecyclerView.ViewHolder {
    public final View mView;
    public final ImageView mIdView;
    public final TextView mContentView, mContentDetailView;
    public final Context mContext;
    public DummyItem mItem;

    public ViewHolder2(final View view) {
        super(view);
        mView = view;
        mContext = view.getContext();
        mIdView = (ImageView) view.findViewById(R.id.crops_image);
        mContentView = (TextView) view.findViewById(R.id.crops_name);
        mContentDetailView = (TextView) view.findViewById(R.id.crops_detail);
    }

    @Override
    public String toString() {
        return super.toString() + " '" + mContentView.getText() + "'";
    }

}

}
krishidarshan包;
导入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;
导入java.util.List;
导入krishidarshan.dummy.DummyContent.DummyItem;
/**
*由阿披实于2017年3月19日创建。
*/
公共类DataAdapter扩展了RecyclerView.Adapter{
私人最终清单价值;
int型;
公共数据适配器(列表项,int-layoutType){
M值=项目;
类型=布局类型;
}
@凌驾
public int getItemViewType(int位置){
返回类型;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
如果(viewType==1){
View view1=LayoutInflater.from(parent.getContext())
.充气(R.layout.card_视图,父视图,错误);
返回新的ViewHolder1(view1);
}否则{
View view2=LayoutInflater.from(parent.getContext())
.充气(R.layout.fragment_crops,parent,false);
返回新的ViewHolder2(view2);
}
}
@凌驾
公共无效onBindViewHolder(最终RecyclerView.ViewHolder,最终整型位置){
if(视图保持器1的保持器实例){
((ViewHolder1)holder.mItem=mValues.get(位置);
((ViewHolder1)holder.mIdView.setImageResource(((ViewHolder1)holder.mItem.id);
((ViewHolder1)holder.mIdView.setImageResource(((ViewHolder1)holder.mItem.id);
((ViewHolder1)holder.mContentView.setText(((ViewHolder1)holder.mItem.content);
}else if(视图保持器2的保持器实例){
((ViewHolder2)holder.mItem=mValues.get(位置);
((ViewHolder2)holder.mIdView.setImageResource(((ViewHolder2)holder.mItem.id);
((ViewHolder2)holder.mContentView.setText(((ViewHolder2)holder.mItem.content);
((ViewHolder2)holder.mContentDetailView.setText((ViewHolder2)holder.mItem.content\u detail);
}
}
@凌驾
public int getItemCount(){
返回mValues.size();
}
公共类ViewHolder 1扩展了RecyclerView.ViewHolder{
公共最终视图mView;
公共最终图像视图中视图;
公共最终文本视图mContentView;
公共语境;
公害;
公共视图持有者1(最终视图){
超级(视图);
mView=视图;
mContext=view.getContext();
mIdView=(ImageView)view.findViewById(R.id.id);
mContentView=(TextView)view.findViewById(R.id.content);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
开关(位置){
案例0:
意图i=新意图(mContext,CropsActivity.class);
mContext.startActivity(i);
打破
案例1:
意图i1=新意图(mContext,WeatherActivity.class);
mContext.startActivity(i1);
}
}
});
}
@凌驾
公共字符串toString(){
返回super.toString();
}
}
公共类ViewHolder 2扩展了RecyclerView.ViewHolder{
公共最终视图mView;
公共最终图像视图中视图;
公共最终文本视图mContentView、mContentDetailView;
公共语境;
公害;
公共视图持有者2(最终视图){
超级(视图);
mView=视图;
mContext=view.getContext();
mIdView=(ImageView)view.findviewbyd(R.id.crops\u image);
mContentView=(TextView)view.findViewById(R.id.crops\u name);
mContentDetailView=(TextView)view.findViewById(R.id.crops\u detail);
}
@凌驾
公共字符串toString(){
返回super.toString();
}
}
}
DummyContent

package krishidarshan.dummy;

/**
* Created by Abhishek on 19-03-2017.
*/

import java.util.ArrayList; 
import java.util.List;

import krishidarshan.R;

/**
* Helper class for providing sample content for user interfaces created by
* Android template wizards.
* <p/>
* TODO: Replace all uses of this class before publishing your app.
*/
public class DummyContent {

/**
 * An array of sample (dummy) items.
 */
public static final List<DummyItem> ITEMS = new ArrayList<>();
public static final List<DummyItem> CROPS_ITEMS = new ArrayList<>();

private static String[] item_names = {"Crops", "Weather", "Market Price", "ABC"};
private static int[] item_list = {R.drawable.bg, R.drawable.bg, R.drawable.bg, R.drawable.bg};

private static String[] crops_names = {"Rice", "Wheat", "Jwar", "Bajra"};
private static int[] crops_images = {R.drawable.bg, R.drawable.bg, R.drawable.bg, R.drawable.bg};
private static String[] crops_content = {"They are useful", "They are useful", "They are useful", "They are useful"};

private static final int COUNT = 4;

static {
    // Add some sample items.
    for (int i = 0; i < COUNT; i++) {
        addItem(createDummyItem(i));
        addItemForCrop(createCropItem(i));
    }
}

private static void addItem(DummyItem item) {
    ITEMS.add(item);
}

private static void addItemForCrop(DummyItem item) {
    CROPS_ITEMS.add(item);
}

private static DummyItem createDummyItem(int position) {
    return new DummyItem(item_list[position], item_names[position]);
}

private static DummyItem createCropItem(int position) {
    return new DummyItem(crops_images[position], crops_names[position], crops_content[position]);
}

/**
 * A dummy item representing a piece of content.
 */
public static class DummyItem {
    public final int id;
    public final String content;
    public final String content_detail;

    public DummyItem(int id, String content) {
        this.id = id;
        this.content = content;
        this.content_detail = null;
    }
    @Override
    public String toString() {
        return content;
    }

    public DummyItem(int id, String content, String content_detail) {
        this.id = id;
        this.content = content;
        this.content_detail = content_detail;
    }

 }
 }
包krishidarshan.dummy;
/**
*由阿披实于2017年3月19日创建。
*/
导入java.util.ArrayList;
导入java.util.List;
进口krishidarshan.R;
/**
*帮助器类,用于为由创建的用户界面提供示例内容
*Android模板向导。
*

*TODO:在发布应用程序之前,请替换此类的所有用法。 */ 公共类内容{ /** *样本(虚拟)项的数组。 */ public static final List ITEMS=new ArrayList(); public static final List_ITEMS=new ArrayList(); 私有静态字符串[]项目名称={“作物”、“天气”、“市场价格”、“ABC”}; 私有静态int[]项_list={R.drawable.bg,R.drawable.bg,R.drawable.bg,R.drawable.bg}; 私有静态字符串[]crops_name={“Rice”、“小麦”、“Jwar”、“Bajra”}; 私有静态int[]crops_images={R.drawable.bg,R.drawable.bg,R.drawable.bg,R.drawable.bg}; 私有静态字符串[]crops_content={“它们有用”、“它们有用”、“它们有用”、“它们有用”}; 私有静态最终整数计数=4; 静止的{ //添加一些示例项。 for(int i=0;i<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp" android:elevation="4dp" android:foreground="?selectableItemBackground" card_view:cardBackgroundColor="#ffffff" card_view:cardCornerRadius="6dp" card_view:contentPadding="0.2dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/id" android:layout_width="match_parent" android:layout_height="150dp" android:adjustViewBounds="true" android:scaleType="fitXY" /> <TextView android:id="@+id/content" android:layout_width="match_parent" android:layout_height="40dp" android:layout_alignBottom="@+id/id" android:alpha="0.8" android:background="#757575" android:gravity="center" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:text="Crops" android:textSize="17dp" /> </RelativeLayout>

if (holder instanceof ViewHolder1) {
    ((ViewHolder1) holder).bind(mValues.get(position));
} else {
// more code here! ...
}