Android:在ListView中获取第i个TextView

Android:在ListView中获取第i个TextView,第1张

概述我试着写一个小应用程序和相关的单元测试.我有一个ListView绑定到SimpleCursorAdapter读取SQL表中的数据.Activity#onCreate()方法是:@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);dbHelper=newDatabaseHelpe

我试着写一个小应用程序和相关的单元测试.
我有一个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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1109311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存