即使 ArrayList 中有值,带 TextView 的动态 TableLayout 也是空的

Dynamic TableLayout with TextView is empty even with values in ArrayList

我正在尝试使用数据库中的数据创建动态 TableLayout。我将数据存储在 ArrayList 中,并将其用于 setText 用于 TextView。我使用调试进行检查,ArrayList 具有与数据库中相同的正确数量的值。它不是空的。但屏幕仍然是空白的。我试图 setTextColorTextView 但它仍然是空的。前 5 TextView 用于标题。后来我使用 for 循环来设置文本。我正在尝试 Fragment 顺便说一句。

编辑:我什至检查了 bookingHistoryList.get(0) 的值。该值是正确的。我无法显示它!

这是代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    sessionManager = new SessionManager(getActivity());
    databaseHelper = new DatabaseHelper(getActivity());
    bookingHistoryList = new ArrayList();
    view =  inflater.inflate(R.layout.fragment_preferences, container, false);
    tableLayout = (TableLayout)view.findViewById(R.id.hTableLayout);

    TableRow pickDate = new TableRow(getActivity());
    TextView pickDateTxt = new TextView(getActivity());
    pickDateTxt.setText("Pick up Date");
    pickDate.addView(pickDateTxt);

    TableRow pickTime = new TableRow(getActivity());
    TextView pickTimeTxt = new TextView(getActivity());
    pickTimeTxt.setText("Pick up Time");
    pickTime.addView(pickTimeTxt);

    TableRow pickUpLocation = new TableRow(getActivity());
    TextView pickUpLocationTxt = new TextView(getActivity());
    pickUpLocationTxt.setText("Pick up Location");
    pickUpLocation.addView(pickUpLocationTxt);

    TableRow destination = new TableRow(getActivity());
    TextView destinationTxt = new TextView(getActivity());
    destinationTxt.setText("Destination");
    destination.addView(destinationTxt);

    TableRow vehicleType = new TableRow(getActivity());
    TextView vehicleTypeTxt = new TextView(getActivity());
    vehicleTypeTxt.setText("Vehicle Type");
    vehicleType.addView(vehicleTypeTxt);
   // databaseHelper.delete();
    String getUserEmail = sessionManager.getUserEmail();
    bookingHistoryList = databaseHelper.getBookingHistory(sessionManager.getUserEmail());
    rowCount = DatabaseUtils.queryNumEntries(databaseHelper.getReadableDatabase(),"bookingDetails");

    n = (int) rowCount*5;
    for(int i = 0; i<n; i++) {
        TableRow tableRow = new TableRow(getActivity());
        TextView textView = new TextView(getActivity());
        textView.setText(bookingHistoryList.get(i).toString());
        textView.setTextColor(Color.BLACK);
        tableRow.addView(textView);
        tableLayout.addView(tableRow,new TableLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));

        TableRow tableRow1 = new TableRow(getActivity());
        TextView textView1 = new TextView(getActivity());
        textView1.setText(bookingHistoryList.get(i+1).toString());
        tableRow1.addView(textView1);
        tableLayout.addView(tableRow,new TableLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));

        TableRow tableRow2 = new TableRow(getActivity());
        TextView textView2 = new TextView(getActivity());
        textView2.setText(bookingHistoryList.get(i+2).toString());
        tableRow2.addView(textView2);
        tableLayout.addView(tableRow,new TableLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));

        TableRow tableRow3 = new TableRow(getActivity());
        TextView textView3 = new TextView(getActivity());
        textView2.setText(bookingHistoryList.get(i+3).toString());
        tableRow2.addView(textView3);
        tableLayout.addView(tableRow,new TableLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));

        TableRow tableRow4 = new TableRow(getActivity());
        TextView textView4 = new TextView(getActivity());
        textView2.setText(bookingHistoryList.get(i+4).toString());
        tableRow2.addView(textView4);
        tableLayout.addView(tableRow,new TableLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        i += 4;
    }

    return view;
}

这是从数据库中获取的代码。它的 return 值不为空。

public ArrayList getBookingHistory(String email) {
    ArrayList bookingHistoryList = new ArrayList();
    String e = email;
    Cursor c = db.rawQuery("select * from bookingDetails where email = '"+ email + "'", null);
    int cou = c.getCount();
    c.moveToFirst();
    do {
        bookingHistoryList.add(c.getString(c.getColumnIndex("date")));
        bookingHistoryList.add(c.getString(c.getColumnIndex("time")));
        bookingHistoryList.add(c.getString(c.getColumnIndex("fromLocation")));
        bookingHistoryList.add(c.getString(c.getColumnIndex("destination")));
        bookingHistoryList.add(c.getString(c.getColumnIndex("vehicle")));
    } while (c.moveToNext());

    return bookingHistoryList;
}

堆栈跟踪:

java.lang.NullPointerException
    at com.prematixsofs.taxiapp.PreferencesFragment.onCreateView(PreferencesFragment.java:75)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
    at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:45)
    at android.os.Handler.handleCallback(Handler.java:800)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5391)

布局:

    <?xml version="1.0" encoding="utf-8"?>
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="com.looper.loop.PreferencesFragment">

    <LinearLayout
        android:id="@+id/fragmentPreferencesLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">


        <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/ScrollView01"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TableLayout
                android:id="@+id/hBookingHistoryTable"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            </TableLayout>


        </ScrollView>

    </LinearLayout>
  </FrameLayout>

两件事:

一个:

您的 TableLayout id 是 hBookingHistoryTable。但是在代码中,您使用的是不同的 ID。

tableLayout = (TableLayout)view.findViewById(R.id.hTableLayout);

将其更改为,

tableLayout = (TableLayout)view.findViewById(R.id.hBookingHistoryTable);

两个:

您正在创建 TableRow,但没有将它们添加到 TableLayout。将此行添加到所有 TableRows,

tableLayout.addView(<table_row_name>, new TableLayout.LayoutParams(
             LayoutParams.FILL_PARENT,
             LayoutParams.WRAP_CONTENT));

TableView 动态添加行的正确步骤:

TableLayout table = (TableLayout) findViewById(R.id.main_table);
TableRow row = new TableRow(this);

TextView item = new TextView(this);
item.setId(200+count); 
item.setText(date);

row.addView(item);
table.addView(row, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));