Java 尝试将常规列表视图转换为可单击列表视图

Java 尝试将常规列表视图转换为可单击列表视图,java,android,listview,Java,Android,Listview,我通过读取一个预先制作好的数据库启动了这个程序,并将其显示在一个列表上,我目前正试图将列表转换为一个可点击的列表,打开一个新的片段。这是我当前正在运行的代码。注释掉的部分是当前的问题 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button b

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

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.setOnItemClickListenerthis;将不起作用,因为它正在应用于android.view.view.OnClickListener。我一直在尝试修改b1.setOnClickListenernew View.OnClickListener以尝试更改其参数,但我没有得到任何运气。是否有一个我没有看到的简单解决方案,或者我需要重新构建此代码以围绕一个可点击列表旋转。谢谢

简单地说,将代码行放在活动的onCreate中,而不是按钮的onClick中,然后将AdapterView.OnItemClickListener实现到您的活动中

ListView listView = (ListView) findViewById(R.id.list);
listView.setOnItemClickListener(this);
现在在线listView.setOnItemClickListenerthis;这是指您的活动类和实现的接口,onItemClick可以工作


如果您的活动是ListActivity,则不需要listView.setOnItemClickListenerthis;此行。

将活动更改为ListActivity,并重写ListActivity类的onListItemClick方法。将所有代码放在listener的onItemClick中 onListItemClick。

使用MainActivity.this作为您的侦听器,这样它就不会引用您的click侦听器