LinearLayout中的ListView不再对OnclickListener作出反应

时间:2012-03-16 03:56:09

标签: android listview onclicklistener

我正在设计一个我见过的教程中的简单应用程序,我试图在列表视图的每一行,名称和价格中简单地显示两个文本视图。这工作,我可以选择行,它会激活一个意图。然而,我然后更改了我的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>

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您似乎正在为ListView明确设置onItemClickListener。这实际上没有必要,因为您正在扩展ListActivity,ListActivity有一个可以覆盖的方法onListItemClick()。我会覆盖onListItemClick()方法,而不是明确设置onItemClickListenerhttp://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方法中,你可以编写你想要的任何逻辑。

希望得到这个帮助。