在recyclerview中使用两个不同的cardview时出错

时间:2016-11-01 09:25:11

标签: java android nullpointerexception android-recyclerview android-cardview

我想要一份世界新七大奇迹和七大自然奇观的清单。我正在尝试使用单一的recyclerview并为两个列表添加标题。

header one
wonder1
wonder1
..
wonder7
header two
n_wonder1
..
n_wonder7

我想对标题使用不同的cardview,但我收到null pointer exception错误。谁能说出我犯的错误? 我正在上传适配器代码。这里。谢谢。

11-01 14:50:38.245 2946-2946/com.leucod.sid.winfo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.leucod.sid.winfo, PID: 2946
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
    at com.leucod.sid.winfo.Won_Adapter.onBindViewHolder(Won_Adapter.java:66)
    at com.leucod.sid.winfo.Won_Adapter.onBindViewHolder(Won_Adapter.java:15)
    at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5471)
    at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5504)
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4741)
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617)
    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994)
    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390)
    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353)
    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574)
    at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3028)
    at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2625)
    at android.view.View.measure(View.java:17565)
    at android.widget.RelativeLayout.measureChild(RelativeLayout.java:698)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:482)
    at android.view.View.measure(View.java:17565)
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
    at android.view.View.measure(View.java:17565)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5545)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
    at android.view.View.measure(View.java:17565)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5545)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
    at android.view.View.measure(View.java:17565)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5545)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
    at android.view.View.measure(View.java:17565)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5545)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
    at android.view.View.measure(View.java:17565)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5545)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2652)
    at android.view.View.measure(View.java:17565)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2027)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1185)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1391)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1073)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5903)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:828)
    at android.view.Choreographer.doCallbacks(Choreographer.java:588)
    at android.view.Choreographer.doFrame(Choreographer.java:558)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:814)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5268)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Me

Adapter.class

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

String[] ContValues;
int[] img;
Context context;
View view1;
Won_Adapter.ViewHolder viewHolder1;

public Won_Adapter(Context context1, String[] ContValues1, int[] img1) {
    ContValues = ContValues1;
    context = context1;
    img = img1;
}
public final int head=0;
public static class ViewHolder extends RecyclerView.ViewHolder{

    public TextView textView;
    public ImageView imageView;
    public TextView txh;
    public ImageView imh;

    public ViewHolder(View v){

        super(v);

        textView = (TextView)v.findViewById(R.id.cont_view);
        imageView = (ImageView)v.findViewById(R.id.cont_image);
        txh = (TextView)v.findViewById(R.id.texth1);
        imh = (ImageView)v.findViewById(R.id.imageh1);
    }
}

@Override
public Won_Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){

    if(viewType==head){
    view1 = LayoutInflater.from(context).inflate(R.layout.header_one,parent,false);
    viewHolder1 = new Won_Adapter.ViewHolder(view1);
    return viewHolder1;}
    else {
        view1 = LayoutInflater.from(context).inflate(R.layout.card_wonders,parent,false);
        viewHolder1 = new Won_Adapter.ViewHolder(view1);
        return viewHolder1;
    }
}

@Override
public void onBindViewHolder(Won_Adapter.ViewHolder holder, int position){
    if (getItemViewType(position)==head){
    holder.txh.setText(ContValues[position]);
    holder.imh.setImageResource(img[position]);}
    else {
        holder.textView.setText(ContValues[position]);
        holder.imageView.setImageResource(img[position]);
    }
}

    @Override
    public int getItemCount () {
        return ContValues.length;
    }
}

1 个答案:

答案 0 :(得分:0)

在适配器类holder.txh.setText(ContValues[position]);中,ContValues[position]返回null。它中没有数据,它是一个空指针异常。把它放在trycatch

里面