我正在设计一个我见过的教程中的简单应用程序,我试图在列表视图的每一行,名称和价格中简单地显示两个文本视图。这工作,我可以选择行,它会激活一个意图。然而,我然后更改了我的xml代码,以便listview将被放置在linearLayout中,以便我在屏幕顶部有一个标题。现在,当我点击任何行时,它们会突出显示,但没有其他任何事情发生。我已经尝试在xml中将textviews设置为clickable = false但仍然没有运气。我希望我在onCreate方法中遗漏了一些简单的东西。 `public class ViewMenuListing扩展了ListActivity {
public static final String ROW_ID = "row_id"; // Intent extra key
private ListView contactListView; // the ListActivity's ListView
private CursorAdapter contactAdapter; // adapter for ListView
private String tableName;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
contactListView = getListView(); // get the built-in ListView
contactListView.setOnItemClickListener(viewContactListener);
setContentView(R.layout.viewmenu);
//Get table name of menu clicked.
Bundle extras = getIntent().getExtras();
tableName = extras.getString("table");
// map each contact's name to a TextView in the ListView layout
String[] from = new String[] { "name", "price" };
int[] to = new int[] { R.id.itemTextView, R.id.priceTextView };
//int[] to = new int[] { R.id.itemTextView};
contactAdapter = new SimpleCursorAdapter(
ViewMenuListing.this, R.layout.menu_list_item, null, from, to);
setListAdapter(contactAdapter); // set contactView's adapter
}`
我在这段代码中唯一改变的是,我之前没有使用过setContentView(R.layout.viewmenu),而且列表只是内容视图。
这是我的viewMenu文件:
`
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello" />
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>`
和我的menu_list_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/itemTextView"
android:padding="8dp"
android:clickable = "false"
android:textSize="20sp" android:textColor="@android:color/white"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical">
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/priceTextView"
android:clickable = "false"
android:textColor="@android:color/white"/>
</LinearLayout>
感谢您的帮助!
答案 0 :(得分:2)
您似乎正在为ListView明确设置onItemClickListener
。这实际上没有必要,因为您正在扩展ListActivity,ListActivity有一个可以覆盖的方法onListItemClick()
。我会覆盖onListItemClick()
方法,而不是明确设置onItemClickListener
。 http://developer.android.com/reference/android/app/ListActivity.html#onListItemClick(android.widget.ListView, android.view.View, int, long)
答案 1 :(得分:0)
请更正以下内容
contactListView = getListView(); and setListAdapter(contactAdapter);
只有当您的类扩展ListActivity时,才能使用上述语法。在您的情况下,您正在扩展Activity,因此上面的方法将无效。
您的menu_list_item.xml对我来说非常好。 在viewmenu.xml文件中,在为listview指定id时进行以下更正。
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
请参阅此更正后的代码。
public class SampleActivity extends ListActivity
{
public static final String ROW_ID = "row_id"; // Intent extra key
private ListView contactListView; // the ListActivity's ListView
private CursorAdapter contactAdapter; // adapter for ListView
private String tableName;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
contactListView = (ListView) findViewById(R.id.list); // get the
// built-in
// ListView
contactListView.setOnItemClickListener(this);
setContentView(R.layout.viewmenu);
Bundle extras = getIntent().getExtras();
tableName = extras.getString("table");
// map each contact's name to a TextView in the ListView layout
String[] from = new String[]
{ "name", "price" };
int[] to = new int[]
{ R.id.itemTextView, R.id.priceTextView };
contactAdapter = new SimpleCursorAdapter(SampleActivity.this,
R.layout.menu_list_item, null, from, to);
contactListView.setAdapter(contactAdapter);
}
@Override
public void onListItemClick(AdapterView<?> adapterView, View view,
int position, long arg3)
{
}
}
现在在onListItemClick方法中,你可以编写你想要的任何逻辑。
希望得到这个帮助。