扩展活动或列表活动?

时间:2013-01-11 17:32:38

标签: java android

好的家伙,所以作为一个Android新手我正在通过各种方式工作。我的问题是我试图在'onListItemClick'中开始一个新的意图活动。我为此设置了方法,但是当我在单击列表中的项目时运行AVD时,没有任何反应,意图无法启动。

如果我将超类更改为'ListActivity',我会收到一条崩溃消息:'您的内容必须有一个listview,其id属性为'android.r.id.list''

任何人都可以告诉我为什么单击列表视图中的项目不会开始意图? 这是我的listview类:

package com.example.sqliteexample;



import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

public class SQLView extends ListActivity {

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    HotOrNot H = new HotOrNot(this, null, null);

    setContentView(R.layout.layout);
    ListView listContent = (ListView)findViewById(R.id.contentList);

    HotOrNot Content = new HotOrNot(this, null, null);
    Content.open();
    Cursor cursor = Content.getData();

    startManagingCursor(cursor);

    @SuppressWarnings("static-access")
    String [] from = new String [] {H.KEY_NAME, H.KEY_HOTNESS};
    int [] to = new int [] {R.id.txtName, R.id.txtAge};

    @SuppressWarnings("deprecation")
    SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.entries, cursor, from, to);

    listContent.setAdapter(cursorAdapter);
 }


public void onListItemClick(ListView l, View v, int posistion, long id)
{

    Intent i = new Intent("com.example.sqliteexample.SQLiteExample");

    startActivity(i);
}




}

5 个答案:

答案 0 :(得分:2)

如果您要使用ListActivity,那么您不需要这一行:

ListView listContent = (ListView)findViewById(R.id.contentList);

但是现在引用的特定ListView(如果它位于相应的xml布局中)必须将其ID更改为

<ListView
  android:id="@android:id/list"
.....

答案 1 :(得分:0)

  

我收到一条崩溃消息“你的内容必须有一个列表视图的ID   属性是'android.r.id.list''

当您扩展ListActivity但xml中没有属性列表(在您的案例中为layout.xml)时会发生这种情况。阅读this example on how to create ListActivity

  

扩展活动或列表活动?

这个问题的答案取决于您的要求。

答案 2 :(得分:0)

在layout.xml文件中调整ListView元素以使其具有类似于下面的内容:最重要的是android:id

<ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" >
    </ListView>

答案 3 :(得分:0)

listContent.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1,
                int position, long id) {

                Intent i = new Intent("com.example.sqliteexample.SQLiteExample");
                startActivity(i);
        }
    });

答案 4 :(得分:0)

活动 - 用于正常目的 ListActivity - 用于更集中于显示列表的位置。

ListActivity优于Activity:

  1. 如果只有文本显示列表,那么甚至不需要定义布局文件,因此不能调用setContentView()
  2. 如果我们需要在布局文件中显示除列表之外的其他内容(比如TextView),只需使用@android:id / xxx和适配器中的布局资源参数android.R.layout.simple_list_item_1将对应于xml中定义的此列表
  3. 不要先定义列表,然后在其上调用setAdapter(),而是直接致电setListAdapter()
  4. 无需在列表上实现OnClickListener,setOnClickListener(),然后使用onItemClick()。只需使用onListItemClick()