2

我正在根据我看过的教程设计一个简单的应用程序,并且我试图在列表视图的每一行中简单地显示两个文本视图,一个名称和一个价格。这行得通,我可以选择该行,它会激活一个意图。但是,我随后更改了我的 xml 代码,以便将列表视图放置在线性布局中,以便我在屏幕顶部有一个标题。现在,当我单击任何行时,它们会突出显示,但没有其他任何反应。我已经尝试在 xml 中将 textviews 设置为 clickable = false 但仍然没有运气。我希望我只是在 onCreate 方法中遗漏了一些简单的东西。`公共类 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>

感谢您的帮助!

4

2 回答 2

2

看起来您正在onItemClickListener为您的 ListView 明确设置一个。这确实没有必要,因为您正在扩展 ListActivity 并且 ListActivity 有一个可以覆盖的方法称为onListItemClick(). 我会覆盖该onListItemClick()方法,而不是显式设置onItemClickListener. http://developer.android.com/reference/android/app/ListActivity.html#onListItemClick(android.widget.ListView, android.view.View, int, long)

于 2012-03-16T04:12:33.317 回答
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 方法中,您可以编写任何您想要的逻辑。

希望这有帮助。

于 2012-03-16T04:25:21.630 回答