带有CursorAdapter的ListView不显示我的值

时间:2011-04-29 14:03:01

标签: android listview simplecursoradapter

我想用滚动功能向用户显示我的数据库的一些内容。

所以我扩展了ListActivity,并使用了SimpleCursorAdapter。问题在于我无法看到价值取代。

private void fillData() {
 // Get all of the rows from the database and create the item list
ListData = data.findAllDbValues();
startManagingCursor(ListData);

// Create an array to specify the fields we want to display in the list
String[] from = new String[]{Data.ID, Data.DESC};

// and an array of the fields we want to bind those fields to 
int[] to = new int[]{R.id.text1, R.id.text2};

// Now create a simple cursor adapter and set it to display 
ListAdapter la = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, ListData, from, to);//R.layout.showdata
setListAdapter(la);

}

如果我使用自定义布局(R.layout.showdata),它只有两个TextView,我可以看到值,但我必须触摸显示的文本来完成我的工作,而不是只触摸任何地方选择。

所以我想使用simple_list_item_2,所以我可以拥有这种能力。任何想法为什么我没有看到值或如何使我的自定义布局与simple_list产生相同的能力?

2 个答案:

答案 0 :(得分:1)

这对我有用:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android_orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:paddingLeft="4dip"
android:paddingRight="5dp">
<TextView android:id="@+id/productRow"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>

诀窍是将TextView行包裹在LinearLayout中。这让我可以单击列表元素上的任意位置来选择它。

答案 1 :(得分:0)

我知道这个问题已经过时了,但我是通过Google来到这里的,我觉得我有答案,因为我有类似的问题。

您在#include <iostream> #include <list> #include <algorithm> #include <iterator> #include <utility> #include <cstdlib> int main() { std::list< int > l{{1, 2, 3, 4}}; std::copy_n(std::cbegin(l), l.size(), std::ostream_iterator< int >(std::cout, " ")); std::cout << std::endl; struct F { int state; void operator () (int i) { state += i; } } f{0}; using I = std::list< int >::const_iterator; std::for_each< I, F && >(std::cbegin(l), std::cend(l), std::move(f)); std::cout << f.state << std::endl; return EXIT_SUCCESS; } 数组中引用自定义TextView,而不是Android数组。你必须改为使用:

int[] to

只需检查XML中的ID和类中的ID是否相同。当您使用自定义视图时,您的类中的引用是 // and an array of the fields we want to bind those fields to int[] to = new int[]{android.R.id.text1, android.R.id.text2}; 以及您的布局R.id.text1但是当您使用Android资源时,您班级中的引用为android:id="@+id:text1",并且布局为android.R.id.text1

您可以使用其中任何一种,但必须保持一致。

我在我的XML中使用android:id="@android:id/text1"(使用id&#34创建一个新的TextView; text1&#34;)但在我的Java类中使用android:id="@+id:text1"以便设置android.R.id.text1在一个不存在的视图中的信息和我得到了完全相同的结果:列表视图包含没有文本的所有行。