尝试将常规列表视图转换为可点击的列表视图

trying to convert a regular list view into a clickable list view

我通过读取预制数据库启动此程序并将其显示在列表中,我目前正在尝试将列表转换为可点击的列表,打开一个新的片段。这是我目前 运行 的代码。注释掉的部分是当前的问题。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b1 =(Button) findViewById(android.R.id.button1);
        db = new MyDatabase(this);

        b1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                schedule = db.getSchedule();
                ListView listView = (ListView) findViewById(R.id.list);
                //listView.setOnItemClickListener(this);
                listView.setAdapter(new SimpleCursorAdapter(
                        MainActivity.this, 
                        R.layout.row,  
                        schedule,                   
                        new String[] {"fName", "Calories", "Protein", "Carbs" },  
                        new int[] { R.id.textView1,  R.id.textView2,  R.id.textView3,  R.id.textView4 },   
                        0));
                schedule = db.getSchedule();
                ListView listView2 = (ListView) findViewById(R.id.list2);
                listView2.setAdapter(new SimpleCursorAdapter(
                        MainActivity.this,
                        R.layout.row,
                        schedule,
                        new String[] {"fName", "Calories", "Protein", "Carbs" },
                        new int[] { R.id.textView1,  R.id.textView2,  R.id.textView3,  R.id.textView4 },
                        0));
            }
        });
    }

    public void onItemClick(AdapterView<?> l, View v, int position, long id) {
        Log.i("HelloListView", "You clicked Item: " + id + " at position:" + position);
        // Then you start a new Activity via Intent
        Intent intent = new Intent();
        intent.setClass(this, Activity2.class);
        intent.putExtra("position", position);
        // Or / And
        intent.putExtra("id", id);
        startActivity(intent);
    }

listView.setOnItemClickListener(这​​个);将不起作用,因为它正在应用于 android.view.View.OnClickListener。我一直在尝试修改 b1.setOnClickListener(new View.OnClickListener(),以尝试更改其参数,但我没有得到任何运气。是否有一个简单的解决方案我没有看到或者我需要重构此代码以围绕可点击列表旋转。谢谢!

简单,将代码行放在 Activity 的 onCreate() 中,而不是按钮的 onClick(),然后将 AdapterView.OnItemClickListener 实现到您的 Activity。

ListView listView = (ListView) findViewById(R.id.list);
listView.setOnItemClickListener(this);

现在在线 listView.setOnItemClickListener(this); this 指的是您的 activity class 和已实现的接口,onItemClick 将起作用。

如果您的 activity 是 ListActivity 则不需要 listView.setOnItemClickListener(this); 这一行。

将 Activity 更改为 ListActivity 并覆盖 ListActivity 的 onListItemClick 方法 class。将所有代码放在监听器的onItemClick中 onListItemClick.