上一次我在这里问了一个问题,我学到了很多东西,所以我觉得值得再试一次。
我使用Fedor从这个链接的懒惰列表: Lazy load of images in ListView
它的工作就像一个魅力。但是,Fedor正在使他的主要课程扩展Activity
而不是ListActivity
。因此,我不再能够使用listItemClick侦听器。 Eclipse在onListItemClick()
周围声明了一些错误。它在我转向
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// Intent launcher here
}
到
protected void onListItemClick(ListView l, View v, int position, long id) {
// Intent launcher here
}
但意图启动器不起作用。祝吐通知也没有。
当我在Activity
中转动ListActivity
时,Eclipse不会错开,但我的模拟器会给我一个力量。
onListItemClick()
点击活动(首选)ListActivity
而不用力关闭?提前多多感谢。
答案 0 :(得分:30)
listItemClickListener附加到ListView
。当您将ListActivity
更改为Activity
时,您的类不再具有与之关联的视图,因此Activity
类不知道如何处理onListItemClickListener。
您只需将听众附加到ListView
:
listview.setOnItemClickListener(new OnItemClickListener(){
@Override
protected void onListItemClick(AdapterView<?> parent, View view, int position, long id){
//Do stuff
}
});
答案 1 :(得分:1)
对于非ListActivity
有ListView
项目点击监听器,您必须拨打ListView
上的setOnItemClickedListener()
(您可能需要如果它来自XML,请使用findViewById()
而不是仅覆盖ListActivity
的{{1}},您可以在此处调用onListItemClickListener()
工具AdapterView.onItemClickedListener()
并将其作为参数传递给Activity
(如果您阅读setOnItemClickedListener()
的源代码(我推荐),您会看到它只是通过创建一个调用被覆盖的ListActivity
的内部侦听器对象来完成幕后操作。
答案 2 :(得分:1)
我一整天都在研究这个问题,在完成自己的ArrayAdapter
后,我无法弄清楚如何更改列表中的课程。
以下是我如何找到它的方法。在我调用我的数组之后,我只是通过这种方法完成了我的代码。
ListView lv =getListView();
lv.setOnItemClickListener(this);
然后我的所有文字都放了
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
String item = (String) getListAdapter().getItem(position);
if (item.equals("Economy"))
{
Intent intent = new Intent(packages.this, economy.class);
startActivity(intent);
}
else if (item.equals("Basic"))
{
Intent intent = new Intent(packages.this, basic.class);
startActivity(intent);
}
else if (item.equals("Professional"))
{
Intent intent = new Intent(packages.this, professional.class);
startActivity(intent);
}
else if (item.equals("Custom Applications"))
{
Intent intent = new Intent(packages.this, applications.class);
startActivity(intent);
}
}
我之间设法用自定义字体和背景完全自定义ListView
。我相信你们中有很多人并不在乎。但是我已经退出并希望通过发布这个内容,我将来可以帮助某个人。
答案 3 :(得分:1)
我的答案是:
1)@Falmarri的代码需要一些更新
2)我建议的编辑完全被拒绝XD
3)Stackoverflow不允许我写评论。
以下是代码:
ListView listView = (ListView) findViewById(R.id.my_listview_in_layout);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
//Do stuff
//...
}
});
参考:根据 android.widget.AdapterView.OnItemClickListener ,公共方法onItemClick()是单击项目时调用的方法{而不是未知的受保护方法onListItemClick()}
答案 4 :(得分:0)
如果您使用ListActivity
,那么您希望执行以下操作:
public class YourClass extends ListActivity implements OnItemClickListener{
@Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
setContentView(R.layout.your_layout);
getListView().setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// your stuff here
}
}
这不是设置OnItemClickListener
的唯一方法。看看其他答案。这是我喜欢的方式,因为它更清晰,更容易阅读。
答案 5 :(得分:0)
我在onCreate()
中添加了以下内容:
listvview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
setPaymentDetails();
}
});
在onCreate()
之外添加了setPaymentDetails()
:
protected void setPaymentDetails()
{
Intent intent = new Intent(this, SetPaymentDetailsActivity.class);
startActivity(intent);
}
答案 6 :(得分:0)
FE.java
package com.example.rfe;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class FE extends ListActivity {
public List<String> d = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.file);
d = new ArrayList<String>();
Scanner in = null;
File f = new File("/sdcard/input.txt");
try
{
in = new Scanner(new FileReader(f));
while(in.hasNext()==true)
{
d.add(in.nextLine());
}
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayAdapter<String> fileList =
new ArrayAdapter<String>(this, R.layout.row, d);
setListAdapter(fileList);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
String selection = l.getItemAtPosition(position).toString();
Toast.makeText(this, selection, Toast.LENGTH_LONG).show();
super.onListItemClick(l, v, position, id);
}
}
答案 7 :(得分:0)
假设您有数据源Fruit包含很少的字符串。您可以将onCreate()
定义如下:
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_fruit,
FRUITS)); // context is this, style is list_fruit, Context, ,data_binding to FRUITs
然后写下onListItemClick()
如下:
protected void onListItemClick(ListView parent, View v, int position, long id) {
Toast.makeText(this, " You selected " + FRUITS[position], Toast.LENGTH_SHORT).show();
}
我希望它适合你:)