【问题标题】:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TableRow.addView(android.view.View)' on a null object reference [duplicate]java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TableRow.addView(android.view.View)”[重复]
【发布时间】:2018-10-06 14:00:55
【问题描述】:

我正在尝试将表格布局与 recyclerView 一起使用,但它给出了错误:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TableRow.addView(android.view.View)' on a null对象引用。

有我的适配器类:

public class CompanyAdapter extends RecyclerView.Adapter<CompanyAdapter.bookViewHolder> {

ArrayList<DataClass> arrayList;
TextView deposit;
TextView purchase;
TextView date;
TableRow tableRow;
TableLayout tableLayout;

public CompanyAdapter(ArrayList<DataClass> arrayList){
    this.arrayList = arrayList;
}

@Override
public bookViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    View view = 

 LayoutInflater.
from(context).inflate(R.layout.company_list_item,parent,false);
    return new bookViewHolder(view);
}

@Override
public void onBindViewHolder(bookViewHolder holder, int position) {
    DataClass dataClass = arrayList.get(position);
    holder.bind(dataClass);
    //bookNameTV.setText(dataClass.getBook());
    //authorNameTV.setText(dataClass.getAuthor());


}

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

public class bookViewHolder extends RecyclerView.ViewHolder{



    public bookViewHolder(View itemView) {
        super(itemView);
        deposit = (TextView) itemView.findViewById(R.id.deposit);
        purchase = (TextView) itemView.findViewById(R.id.purchase);
        date = (TextView) itemView.findViewById(R.id.date);
        tableLayout = (TableLayout) 
itemView.findViewById(R.id.maintablelayout);

    }

    public void bind(DataClass dataClass){
        deposit.setText(Integer.toString(dataClass.getAmount()));
        purchase.setText(Integer.toString(dataClass.getAmount()));
        date.setText(dataClass.date);
        tableRow.addView(deposit);
        tableRow.addView(purchase);
        tableRow.addView(date);
        tableLayout.addView(tableRow, new TableLayout.LayoutParams(
                TableLayout.LayoutParams.FILL_PARENT,
                TableLayout.LayoutParams.WRAP_CONTENT));// giving error

    }
}
}

还有一个问题,有没有更好的方法在不使用任何库的情况下将 tableLayout 与 recycler View 一起使用?
谢谢..!

【问题讨论】:

  • 问题解决了吗?
  • 上述问题已解决。但是出现另一个错误:您必须在孩子的父母上调用 removeView() 。我试过 if(tableRow.getParent() != null){tableLayout.removeAllViews};但得到同样的错误。

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


【解决方案1】:

你没有在任何地方初始化tableRow

【讨论】:

    【解决方案2】:

    TableRow 是一个实例变量,所以 JAVA 会在运行时用 null 值初始化它,你不能调用任何 null 值的方法。您必须将一个对象分配给TableRow 引用变量。

    喜欢:

    tableRow=new TableRow(context); 
    

    【讨论】:

    • 我添加了“tableRow = new TableRow(context);”在 Bind 方法中的 bookViewHolder 和 removeAllViews() 中,例如: date.setText(dataClass.date); tableRow.removeAllViews(); tableRow.addView(存款);但仍然出现错误:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。
    • 您一次又一次地添加相同的对象,这就是您收到错误的原因 您必须在孩子的父母上调用 removeView() ,您需要更改代码。在回收视图中,它重用对象,因此您不能在 TableView 中添加相同的对象。我指的是这些对象 tableRow.addView(deposit); tableRow.addView(购买); tableRow.addView(date);
    • 但在我的情况下,列表项或可回收对象是 tableRow,而不是存款、购买和金额视图。即使我在 tableRow 中只添加一个视图,它也会给出相同的错误。
    【解决方案3】:

    您必须创建新的 TableRow

    使用此代码

    TableRow tableRow=new TableRow(context); 
    tableRow.addView(deposit);
        tableRow.addView(purchase);
        tableRow.addView(date);
        if(tableRow.getParent()!=null){
            ((ViewGroup)tableRow.getParent()).removeView(tableRow);
        }
        tableLayout.addView(tableRow, new TableLayout.LayoutParams(
                TableLayout.LayoutParams.FILL_PARENT,
                TableLayout.LayoutParams.WRAP_CONTENT));
    

    【讨论】:

    • 得到另一个错误:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。在哪里添加这个 removeView()?
    • 尝试编辑代码@burhansabir
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多