最简单的布局让我发疯

时间:2015-04-19 20:27:53

标签: android

我在TextView内有一个CardView。现在的问题是当我在TextView上使用setText方法时它会给我nullPointerException。根据我的测试textViewAuthor,即使在初始化之后,代码仍为null。奇怪的部分是textViewName,它以相同的方式初始化为非空。为什么即使在分配视图后它仍然保持为空?

public class EBooksRecyclerViewAdapter extends RecyclerView.Adapter<EBooksRecyclerViewAdapter.ViewHolder> {
    private String[] ebookName, ebookAuthor;
    private OnItemClickListener mItemClickListener;

    public EBooksRecyclerViewAdapter(String[] ebookName, String[] ebookAuthor) {
        this.ebookName = ebookName;
        this.ebookAuthor = ebookAuthor;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView textViewName, textViewAuthor;
        private CardView cardView;
        public ViewHolder(View v) {
            super(v);
            textViewName = (TextView)v.findViewById(R.id.textViewName);     //not null
            textViewAuthor = (TextView)v.findViewById(R.id.textViewAuthor); //NULL !!
            if(textViewName == null)
                Log.e("textViewAuthor","null");
            if(textViewAuthor == null)
                Log.e("textViewAuthor","null");

            cardView = (CardView)v.findViewById(R.id.card_view);
            cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mItemClickListener.onItemClick(textViewName.getText().toString());
                }
            });
        }
    }

    public void setOnItemClickListener(OnItemClickListener mItemClickListener){
        this.mItemClickListener = mItemClickListener;
    }

    public interface OnItemClickListener {
        public void onItemClick(String eventName);
    }

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

        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.event_card_view, parent, false);
        return new ViewHolder(v);
    }

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

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Log.e("NAME", ebookName[position]);     //not null
        Log.e("AUTHOR", ebookAuthor[position]); //not null

        holder.textViewName.setText(ebookName[position]);
        holder.textViewAuthor.setText(ebookAuthor[position]); //nullPointerException
    }

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

这是我的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1">

    <android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:clickable="true"
        android:layout_weight="0.25">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="2dp">

            <TextView
                android:id="@+id/textViewName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:layout_margin="2dp" />

            <TextView
                android:id="@+id/textViewAuthor"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:layout_margin="2dp" />

        </LinearLayout>
    </android.support.v7.widget.CardView>

</LinearLayout>

0 个答案:

没有答案