2

为了将项目动态添加到滚动视图中,我已经花了几个小时尝试遵循各种教程,但似乎没有任何效果......

这个想法只是将字符串添加到复选框旁边的 TextView 中,这是在单独的 xml 文件中完成的,我只是希望列表随着我不断添加它们而增长。

目前,只添加了一个字符串(最后一个替换了前一个),并且在任何试图改变它的尝试中,我的应用程序停止工作。这是代码:

TableLayout addPlayersTableLayout;

TableRow tableRow1;

ScrollView addPlayersScrollView;

String[] players = new String[]{ "Blah", "Whatever", "Test", "Nipah!"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPlayersTableLayout = (TableLayout)findViewById(R.id.TableLayout1);

    tableRow1 =(TableRow)findViewById(R.id.tableRow1);

    addPlayersScrollView = (ScrollView)findViewById(R.id.playersScrollView);

    insertPlayerInScrollView();     
}

这是应该添加项目的函数的实现:(add_player_row.xml 是应该作为项目的文本视图和复选框的文件)

private void insertPlayerInScrollView() {
    LayoutInflater inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View newPlayerRow = inflator.inflate(R.layout.add_player_row, null);

    TextView newPlayerTextView = (TextView) newPlayerRow.findViewById(R.id.addPlayerTextView);

    CheckBox playerCheckBox = (CheckBox)findViewById(R.id.playerCheckBox);
    newPlayerTextView.setText(players[1]);
    addPlayersTableLayout.addView(newPlayerRow,0);

}

最后一行代码是它工作的唯一方式,尽管在大多数论坛和教程上,人们会建议我使用 addPlayersScrollView,但如果我这样做,应用程序就会崩溃。所以...有什么想法吗?非常感谢!

4

1 回答 1

8

我面临的事情和你相似。我有这样的布局:

<ScrollView 
    android:layout_width="match_parent"
    android:layout_height="match_parent">


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

</ScrollView>

并像这样定义我的行(mRowLayout.xml):

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

    <CheckBox
        android:id="@+id/checkBoxServEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</TableRow>

然后我使用以下代码来扩充我的行:

private void fillTable(View v, Cursor c) {

TableLayout ll = (TableLayout) v.findViewById(R.id.tableLayoutList);

View mTableRow = null;
int i = 0;
while(!c.isAfterLast()){
    i++;
    mTableRow = (TableRow) View.inflate(getActivity(), R.layout.mRowLayout, null);

     CheckBox cb = (CheckBox)mTableRow.findViewById(R.id.checkBoxServEmail);
     cb.setText( c.getString(c.getColumnIndex(Empleado.EMAIL)));


     mTableRow.setTag(i);

    //add TableRows to TableLayout
    ll.addView(mTableRow);

    c.moveToNext();
}
}

我在这里尝试做的是动态地膨胀我的行。光标有我想从数据库中显示的项目。我不确定这是否可以解决您的问题。让我知道。

于 2013-06-21T19:31:31.523 回答