如何在android中处理Listview中的点击事件?

如何在android中处理Listview中的点击事件?,android,listview,android-intent,onitemclicklistener,onitemclick,Android,Listview,Android Intent,Onitemclicklistener,Onitemclick,下面是我创建列表视图的测试代码,列表视图显示成功,但是单击事件中有错误。我想创建向新活动发送硬代码消息的意图。但是,它显示了该行的错误 Intent intent = new Intent(context, SendMessage.class); 所以,问题是,我应该为这个课程提供什么 另外,如何捕获列表视图行中的数据并传递给新活动,而不是硬编码输出消息?e、 g.BBB、AAA、R.可绘制。表1\u hdpi用于第一行 谢谢 public class MainActivity extends

下面是我创建列表视图的测试代码,列表视图显示成功,但是单击事件中有错误。我想创建向新活动发送硬代码消息的意图。但是,它显示了该行的错误

Intent intent = new Intent(context, SendMessage.class);
所以,问题是,我应该为这个课程提供什么

另外,如何捕获列表视图行中的数据并传递给新活动,而不是硬编码输出消息?e、 g.
BBB、AAA、R.可绘制。表1\u hdpi
用于第一行

谢谢

public class MainActivity extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.ListViewTest.MESSAGE";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ArrayList<ListEntry> members = new ArrayList<ListEntry>(); 
        members.add(new ListEntry("BBB","AAA",R.drawable.tab1_hdpi));
        members.add(new ListEntry("ccc","ddd",R.drawable.tab2_hdpi));
        members.add(new ListEntry("assa","cxv",R.drawable.tab3_hdpi));
        members.add(new ListEntry("BcxsadvBB","AcxdxvAA"));
        members.add(new ListEntry("BcxvadsBB","AcxzvAA"));
        members.add(new ListEntry("BcxvBB","AcxvAA"));
        members.add(new ListEntry("BvBB","AcxsvAA"));
        members.add(new ListEntry("BcxvBB","AcxsvzAA"));
        members.add(new ListEntry("Bcxadv","AcsxvAA"));
        members.add(new ListEntry("BcxcxB","AcxsvAA"));
        ListView lv = (ListView)findViewById(R.id.listView1);
        Log.i("testTag","before start adapter");
        StringArrayAdapter ad = new StringArrayAdapter (members,this);
        Log.i("testTag","after start adapter");
        Log.i("testTag","set adapter");
        lv.setAdapter(ad);
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                Intent intent = new Intent(context, SendMessage.class);
                String message = "abc";
                intent.putExtra(EXTRA_MESSAGE, message);
                startActivity(intent);
            }
        });
    }
公共类MainActivity扩展活动{
公共最终静态字符串EXTRA_MESSAGE=“com.example.ListViewTest.MESSAGE”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList成员=新的ArrayList();
添加(新列表(“BBB”、“AAA”、R.drawable.tab1_hdpi));
添加(新列表(“ccc”,“ddd”,R.drawable.tab2_hdpi));
添加(新列表(“assa”、“cxv”、R.drawable.tab3_hdpi”);
添加(新列表(“BcxsadvBB”、“AcxdxvAA”);
添加(新列表(“BcxvadsBB”、“AcxzvAA”);
添加(新列表(“BcxvBB”、“AcxvAA”);
新增(新名单(“BvBB”、“AcxsvAA”);
添加(新列表(“BcxvBB”、“AcxsvzAA”);
新增(新列表(“Bcxadv”、“AcsxvAA”);
添加(新列表(“BcxcxB”、“AcxsvAA”);
ListView lv=(ListView)findViewById(R.id.listView1);
Log.i(“testTag”、“启动前适配器”);
StringArrayAdapter ad=新StringArrayAdapter(成员,此);
Log.i(“testTag”、“启动后适配器”);
Log.i(“testTag”、“set adapter”);
低压设置适配器(ad);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
意向意向=新意向(上下文,SendMessage.class);
字符串消息=“abc”;
intent.putExtra(额外消息,消息);
星触觉(意向);
}
});
}

我看不出您在哪里声明
上下文
。为了创建意图,您可以使用
MainActivity。此

 lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                Intent intent = new Intent(MainActivity.this, SendMessage.class);
                String message = "abc";
                intent.putExtra(EXTRA_MESSAGE, message);
                startActivity(intent);
            }
        });

ListView具有项click listener回调。您应该在
ListView
中设置
onItemClickListener
。回调包含
AdapterView
position
作为参数。这可以为您提供
ListEntry

lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                ListEntry entry= (ListEntry) parent.getAdapter().getItem(position);
                Intent intent = new Intent(MainActivity.this, SendMessage.class);
                String message = entry.getMessage();
                intent.putExtra(EXTRA_MESSAGE, message);
                startActivity(intent);
            }
        });
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
ListEntry条目=(ListEntry)parent.getAdapter().getItem(位置);
意向意向=新意向(MainActivity.this、SendMessage.class);
String message=entry.getMessage();
intent.putExtra(额外消息,消息);
星触觉(意向);
}
});

正如您所说,此语句中的代码出现错误

Intent intent = new Intent(context, SendMessage.class);
这是因为您正在将OnItemClickListener匿名类的上下文提供给Intent构造函数,但它是根据Intent的构造函数提供的

android.content.Intent.Intent(Context packageContext, Class<?> cls)
此外,要将您的邮件从此MainActivity发送到SendMessage类,请参阅下面的代码

lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                ListEntry entry= (ListEntry) parent.getAdapter().getItem(position);
                Intent intent = new Intent(MainActivity.this, SendMessage.class);
                intent.putExtra(EXTRA_MESSAGE, entry.getMessage());
                startActivity(intent);
            }
        });
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
ListEntry条目=(ListEntry)parent.getAdapter().getItem(位置);
意向意向=新意向(MainActivity.this、SendMessage.class);
intent.putExtra(额外消息,entry.getMessage());
星触觉(意向);
}
});
如果这对你有帮助,请告诉我

编辑:- 如果您在获取list的值时发现了一些问题,请做一件事来清除数组列表

ArrayList<ListEntry> members = new ArrayList<ListEntry>();
ArrayList成员=新的ArrayList();
全球范围内,即在重新创建和更改您的侦听器之前,如下所示

 lv.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                    Intent intent = new Intent(MainActivity.this, SendMessage.class);
                    intent.putExtra(EXTRA_MESSAGE, members.get(position));
                    startActivity(intent);
                }
            });
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
意向意向=新意向(MainActivity.this、SendMessage.class);
intent.putExtra(额外消息,members.get(position));
星触觉(意向);
}
});
因此,您的整个代码看起来就像

public class MainActivity extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.ListViewTest.MESSAGE";
ArrayList<ListEntry> members = new ArrayList<ListEntry>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        members.add(new ListEntry("BBB","AAA",R.drawable.tab1_hdpi));
        members.add(new ListEntry("ccc","ddd",R.drawable.tab2_hdpi));
        members.add(new ListEntry("assa","cxv",R.drawable.tab3_hdpi));
        members.add(new ListEntry("BcxsadvBB","AcxdxvAA"));
        members.add(new ListEntry("BcxvadsBB","AcxzvAA"));
        members.add(new ListEntry("BcxvBB","AcxvAA"));
        members.add(new ListEntry("BvBB","AcxsvAA"));
        members.add(new ListEntry("BcxvBB","AcxsvzAA"));
        members.add(new ListEntry("Bcxadv","AcsxvAA"));
        members.add(new ListEntry("BcxcxB","AcxsvAA"));
        ListView lv = (ListView)findViewById(R.id.listView1);
        Log.i("testTag","before start adapter");
        StringArrayAdapter ad = new StringArrayAdapter (members,this);
        Log.i("testTag","after start adapter");
        Log.i("testTag","set adapter");
        lv.setAdapter(ad);
        lv.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {
                        Intent intent = new Intent(MainActivity.this, SendMessage.class);
                        intent.putExtra(EXTRA_MESSAGE, members.get(position).getMessage());
                        startActivity(intent);
                    }
                });
    }
公共类MainActivity扩展活动{
公共最终静态字符串EXTRA_MESSAGE=“com.example.ListViewTest.MESSAGE”;
ArrayList成员=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
添加(新列表(“BBB”、“AAA”、R.drawable.tab1_hdpi));
添加(新列表(“ccc”,“ddd”,R.drawable.tab2_hdpi));
添加(新列表(“assa”、“cxv”、R.drawable.tab3_hdpi”);
添加(新列表(“BcxsadvBB”、“AcxdxvAA”);
添加(新列表(“BcxvadsBB”、“AcxzvAA”);
添加(新列表(“BcxvBB”、“AcxvAA”);
新增(新名单(“BvBB”、“AcxsvAA”);
添加(新列表(“BcxvBB”、“AcxsvzAA”);
新增(新列表(“Bcxadv”、“AcsxvAA”);
添加(新列表(“BcxcxB”、“AcxsvAA”);
ListView lv=(ListView)findViewById(R.id.listView1);
Log.i(“testTag”、“启动前适配器”);
StringArrayAdapter ad=新StringArrayAdapter(成员,此);
Log.i(“testTag”,“在启动ada之后”
 lv.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                    Intent intent = new Intent(MainActivity.this, SendMessage.class);
                    intent.putExtra(EXTRA_MESSAGE, members.get(position));
                    startActivity(intent);
                }
            });
public class MainActivity extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.ListViewTest.MESSAGE";
ArrayList<ListEntry> members = new ArrayList<ListEntry>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        members.add(new ListEntry("BBB","AAA",R.drawable.tab1_hdpi));
        members.add(new ListEntry("ccc","ddd",R.drawable.tab2_hdpi));
        members.add(new ListEntry("assa","cxv",R.drawable.tab3_hdpi));
        members.add(new ListEntry("BcxsadvBB","AcxdxvAA"));
        members.add(new ListEntry("BcxvadsBB","AcxzvAA"));
        members.add(new ListEntry("BcxvBB","AcxvAA"));
        members.add(new ListEntry("BvBB","AcxsvAA"));
        members.add(new ListEntry("BcxvBB","AcxsvzAA"));
        members.add(new ListEntry("Bcxadv","AcsxvAA"));
        members.add(new ListEntry("BcxcxB","AcxsvAA"));
        ListView lv = (ListView)findViewById(R.id.listView1);
        Log.i("testTag","before start adapter");
        StringArrayAdapter ad = new StringArrayAdapter (members,this);
        Log.i("testTag","after start adapter");
        Log.i("testTag","set adapter");
        lv.setAdapter(ad);
        lv.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {
                        Intent intent = new Intent(MainActivity.this, SendMessage.class);
                        intent.putExtra(EXTRA_MESSAGE, members.get(position).getMessage());
                        startActivity(intent);
                    }
                });
    }
implements OnItemClickListener
yourList.setOnItemclickListener(this);
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this, "You Clicked at ",   
 Toast.LENGTH_SHORT).show();
}
    //get main activity
    final Activity main_activity=getActivity();

    //list view click listener
    final ListView listView = (ListView) inflatedView.findViewById(R.id.listView_id);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String stringText;

            //in normal case
            stringText= ((TextView)view).getText().toString();                

            //in case if listview has separate item layout
            TextView textview=(TextView)view.findViewById(R.id.textview_id_of_listview_Item);
            stringText=textview.getText().toString();                

            //show selected
            Toast.makeText(main_activity, stringText, Toast.LENGTH_LONG).show();
        }
    });

    //populate listview