0

我有一个 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
}

谢谢。

4

3 回答 3

2

使用开关或

 if(obj_itemDetails.getName().equals("choice 1"){
  /* Do somes Struff*/ }
于 2012-08-27T12:13:36.917 回答
1

我希望在自定义适配器类中,您使用项目布局来显示列表中的每个项目。在那个项目列表中,我认为你有一个 TextView 来显示项目描述。对于每个项目的点击,需要修改适配器代码如下:

在自定义适配器中创建一个接口:

public interface OnItemClickListener{
    void onClick(View v,String description);
}

在自定义适配器中创建一个字段:

private OnItemClickListener listener;

从适配器构造函数,初始化监听器:

public ItemListBaseAdapter(....,OnItemClickListener listener){
    ...your code.
    this.listener=listener;
}

在 Adapter 的 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 将被调用,您可以根据需要进行处理。

如果您需要整个列表项而不是 TextView 的单击事件,则在 Adapter 的 getView(..) 方法中设置 convertView 的 onClick 而不是 TextView

于 2012-08-27T12:31:37.020 回答
0

一个listView就是整个listView,你不能把每一项都当作一个不同的实体。

你可以做的是在你的函数中你有参数 theView和 the position,用它们来做一个 switch-case 来区分它们

于 2012-08-27T12:14:19.273 回答