【问题标题】:Can I use OnItemClickListener for ListView with OnClickListener for items?我可以将 OnItemClickListener 用于 ListView 和 OnClickListener 用于项目吗?
【发布时间】:2014-06-10 09:15:16
【问题描述】:

是否可以将 OnItemClickListener 用于 ListView 和 OnClickListener 一起用于它们的项目?这不是必需的,但在我的情况下,将适配器(onClick)和活动(onItemClick)之间的功能分开会更舒服。当我尝试将这些监听器一起使用时,只有 OnClickListener 有效。

我所做的只是:

public class ProfilePassengersListActivity extends ConnectActivity
{
    protected ListView lv;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.another_passengers_list_screen);
        anotherPassengersListView = (ListView)findViewById(R.id.anotherPassengersListListViewPassengers);
        lv.setOnItemSelectedListener(openInfoTraveler);
    }
    private android.widget.AdapterView.OnItemClickListener openInfoTraveler = new OnItemClickListener() 
    {
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) 
          {
              Log.i(LOGTAG, "in onclick");
          }
    };
}

在适配器处:

public class ProfilePassengersListAdapter extends ArrayAdapter<String> {
...
@Override
    public View getView(final int position, View convertView, final ViewGroup parent){
        convertView = super.getView(position, convertView, parent);
        final String currObj = list.get(position);
        if(convertView.findViewById(R.id.item_delete_confirmation) == null)
        {
            RelativeLayout container = new RelativeLayout(ctx);
            LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View child = inflater.inflate(R.layout.item_delete_confirmation, null);
            convertView.setTag("main");
            container.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, convertView.getHeight()));
            container.addView(convertView);
            container.addView(child);
            convertView = container;
        }
        if(!preparedToDelete.contains(list.get(position)))
        {
            convertView.findViewWithTag("main").setVisibility(View.VISIBLE);
            convertView.findViewById(R.id.item_delete_confirmation).setVisibility(View.INVISIBLE);
        }
        else
        {
            convertView.findViewWithTag("main").setVisibility(View.GONE);
            convertView.findViewById(R.id.item_delete_confirmation).setVisibility(View.VISIBLE);
            //Log.i("wtf", "prepared to delete: " + currObj);
        }
        final View itemView = convertView;
        /*convertView.setFocusable(false);
        convertView.setFocusableInTouchMode(false);
        convertView.setClickable(true);*/
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Log.i(LOGTAG, "onClick");
            }
        });
        return convertView;
}

【问题讨论】:

  • 在这里发布您的代码...
  • 为什么你也想要?你想做什么?
  • 是的,可以同时启用两个监听器。但问题是你如何同时启用它们。这就是为什么发布一些代码。我们会知道为什么你的代码不工作
  • 您可以在您的适配器中为您的视图编写一个 OnClickListener 方法。并且您还可以在 Activity 中为您的 listView 编写 onItemClickListener。我经常在我的应用程序中使用它。如果您显示您的代码,我可以帮助您。

标签: android listview onclicklistener onitemclicklistener


【解决方案1】:

使用这个方法:

lv.setOnItemClickListener(openInfoTraveler);

而不是这个:

lv.setOnItemSelectedListener(openInfoTraveler);

【讨论】:

  • 哦,对不起。当然我使用 setOnItemClickListener 方法。它来自实验
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2012-01-14
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多