我有一个listView,它有大约100个项目。
目前我有这段代码:
public class VanillaList extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vanilla_block_list);
ArrayList<ItemDetails> image_details = GetSearchResults();
final ListView lv1 = (ListView) findViewById(R.id.listV_main);
lv1.setAdapter(new ItemListBaseAdapter(this, image_details));
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv1.getItemAtPosition(position);
ItemDetails obj_itemDetails = (ItemDetails)o;
Toast.makeText(VanillaList.this, "You have clicked on : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
}
});
}
这会显示一个Toast通知,说明前面有“你点击过:”的列表项的名称。
所有100件商品都是如此。我如何为每个项目创建不同的onClick方法。我试过了:
public class VanillaBlockList extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vanilla_block_list);
ArrayList<ItemDetails> image_details = GetSearchResults();
final ListView lv1 = (ListView) findViewById(R.id.listV_main);
lv1.setAdapter(new ItemListBaseAdapter(this, image_details));
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv1.getItemAtPosition(position);
ItemDetails obj_itemDetails = (ItemDetails)o;
Toast.makeText(VanillaBlockList.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
}
lv2.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv2.getItemAtPosition(position);
ItemDetails obj_itemDetails = (ItemDetails)o;
Toast.makeText(VanillaBlockList.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
}
});
}
但这对我没用。谁能帮我?
我更喜欢onClick方法,就像在布局XML文件中有android:onClick="something"
然后在java文件中:
public void something{
//method here
}
感谢。
答案 0 :(得分:2)
使用开关或
if(obj_itemDetails.getName().equals("choice 1"){
/* Do somes Struff*/ }
答案 1 :(得分:1)
我希望在Custom Adapter类中,您使用项目布局来显示列表中的每个项目。在该项目列表中,我认为您正在使用TextView来显示项目描述。要获得每个项目的点击,需要修改适配器代码,如下所示:
在自定义适配器中创建一个接口:
public interface OnItemClickListener{
void onClick(View v,String description);
}
在自定义适配器中创建一个字段:
private OnItemClickListener listener;
从适配器构造函数中,初始化Listener:
public ItemListBaseAdapter(....,OnItemClickListener listener){
...your code.
this.listener=listener;
}
在适配器的getView(...)中更改/添加以下代码
TextView tv=convertView.findViewById(yourID);
tv.setOnClickListener(new TextView.OnClickListener() {
@Override
public void onClick(View v) {
if(listener!=null){
listener.onClick(v, ((TextView)v).getText().toString());
}
}
});
然后在你的活动课中,
创建一个新字段:
private OnItemClickListener myItemClickListener=new OnItemClickListener() {
@Override
public void onClick(View v, String description) {
// Do what you like when individual item gets clicked.
}
};
将适配器实例创建为:
new ItemListBaseAdapter(this, image_details, myItemClickListener);
现在,当您点击listitem中的textview时,您的myItemClickListener的onClick将被调用,您可以根据需要进行处理。
如果你需要整个listitem的click事件而不是TextView,那么在Adapter的getView(..)方法中设置convertView的onClick而不是TextView
答案 2 :(得分:0)
listView是整个listView,您不能将每个项目视为不同的实体。
您可以使用View
和position
作为参数进行功能,可以使用它们来切换案例来区分它们