我试着写一个小应用程序和相关的单元测试.
我有一个ListVIEw绑定到SimpleCursorAdapter读取sql表中的数据.
Activity#onCreate()方法是:
@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dbHelper = new DatabaseHelper(this); sqliteDatabase dbRead = dbHelper.getReadableDatabase(); String[] columns={BaseColumns._ID, ENTRY_VALUE}; cursor = dbRead.query(ENTRIES_tablename, columns, null, null, null, null, null); String[] from = {"value"}; int[] to = {R.ID.value}; adapter = new SimpleCursorAdapter(this, R.layout.List_entry, cursor, from, to); setlistadapter(adapter);}
我在单元测试中的测试是:
@UiThreadTest public voID testTheElementInsIDeTheDBisdisplayedInTheList() { String entryValue = "clipboard entry 1"; DatabaseHelper dbHelper = new DatabaseHelper(cmActivity); Cursor beforeCursor = selectAllEntrIEs(dbHelper); // The table, at the begining of the test, is empty, I control that assertEquals(0, beforeCursor.getCount()); // I insert the new value in the table insertEntry(dbHelper, entryValue); // and I control that is really insIDe the table Now Cursor afterCursor = selectAllEntrIEs(dbHelper); assertEquals(1, afterCursor.getCount()); // This method calls the method "requery()" on the cursor associate // to the ListVIEw's adapter to update the List vIEw cmActivity.updateList(); // I control that the ListVIEw is updated assertEquals(1, entryList.getCount()); // Now I try to retrive the only child insIDe the List vIEw // to extract the text insIDe it and to compare this text with // the value inserted into the DB table. TextVIEw entryVIEw = (TextVIEw) entryList.getChildAt(0); String vIEwText = entryVIEw.getText().toString(); assertEquals(entryValue, vIEwText); }
我的问题出在第三行:
TextVIEw entryVIEw = (TextVIEw) entryList.getChildAt(0);
我sude getChildAt()来获取ListVIEw的第一个TextVIEw子项.但是此方法返回null,因此测试会获得NullPointerException.
也许getChildAt()不是从ListVIEw获取VIEw子进程的正确方法,所以哪个是正确的?
我从文档中看到该方法适用于GroupVIEw,我没有使用它们,我是否需要配置默认的GroupVIEw并将所有条目放入其中?这样,getChildAt(0)会工作吗?这是设置ListVIEw的正确方法吗?
谢谢你,再见
安德里亚
正如Vivek所问,我在这里发布了main.xml:
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:orIEntation="vertical" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent"> <ListVIEw androID:ID="@androID:ID/List" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" /> <TextVIEw androID:ID="@androID:ID/empty" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Empty set" /></linearLayout>
你可以看到非常非常基本的.另外列表条目非常简单:
<?xml version="1.0" enCoding="utf-8"?><TextVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/value" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:padding="10dp" androID:textSize="16sp" ></TextVIEw>
解决方法:
我怀疑在调用getChildAt()方法时是否填充了列表.因此,请调用getChildCount()方法并查看是否填充了列表.并在此处回发输出.
编辑:
现在我明白了这个问题. ListVIEw.getCount()方法返回列表中填充的项目数. ListVIEw.getChildCount()方法或ListVIEw.getChildAt()方法将在此处返回0,因为这些方法仅在视图对用户可见时才返回值.只有在生成文本视图后才能使用getChildAt()方法.即如果您在ListvIEw的OnItemClick方法或任何ListvIEw侦听器实现中使用该方法,您将获得所需的输出.无论如何,需要在此方法中获取对textvIEws的引用是什么?
总结以上是内存溢出为你收集整理的Android:在ListView中获取第i个TextView全部内容,希望文章能够帮你解决Android:在ListView中获取第i个TextView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)