如何处理Android ListView子项使用SimpleAdapter单击事件?

时间:2014-01-29 09:57:39

标签: android listview android-listview simpleadapter

我一直在开发一个Android应用程序,我被困在中间。

问题是我使用SimpleAdapter来执行适配器内容并在Listview中显示项目,据我所知,我不能override getView()方法SimpleAdapter类将点击侦听器绑定到项目。

还有另一种方法来处理子项的点击事件,比如使用XML,你可以像android:clickable="true"android:onClick="clicklistenr"那样用XML编写,使用这个我可以得到项目,但我的问题是如果我使用这个然后我无法得到适配器的位置,我需要获得适配器项值和处理其他任务。所以我被困在这里任何帮助都会很明显。感谢。

例如,我有一个ListView,其中包含一个imageTextView,如Button,在每个项目中共享Button。并且我无法找到使用setOnItemClickListener点击其图像或按钮的方法。所以我需要一种方法来处理ListView的这些子项的点击事件,我正在使用SimpleAdapter

4 个答案:

答案 0 :(得分:1)

只需使用您的侦听器实现调用listView.setOnItemClickListener()

并使用

list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

            }
        });

list=(ListView)findViewById(R.id.list);list.setAdapter(your_adapter);

的位置

详情请点击:http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/

希望它会帮助你...... :)

答案 1 :(得分:0)

您可以使用

 myListView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        HashMap<String, Object> obj = (HashMap<String, Object>) adapter.getItem(position);
            String result= (String) obj.get("name");
            Log.d("Yourtag", name);
    }
});

答案 2 :(得分:0)

首先,您的问题是如何处理自定义列表视图的项目..而不是子。反正...

如果您使用的是SimpleAdapter,则可以使用getView()。但是如果您使用的是SimpleAdapter,则无需使用getView(),因为它会处理数据到布局的映射通过资源。有关信息,请查看开发者网站中的SimpleAdapter

另一件事是没有强制要求使用任何特定的适配器。您可以创建任何适配器类,它将扩展将实现getView()的{​​{3}}。

getView()内,您可以将自定义布局(包含图像,按钮等等)扩展到您的视图或转换视图。如下所示:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    vi = convertView;
    if (convertView == null)
        vi = inflater.inflate(R.layout.yourcustomlayout, null);

            //Initialize your custom views here
            TextView someText= (TextView) vi.findViewById(R.id.tvSometext);
            Button likeButton = (Button ) vi.findViewById(R.id.btnLike);

            //put data or call onclicklistener or 
            //whatever you want to do with custom views
            likeButton .setOnClickListener(...){
             //on click
            }
       }

Ans只是通过你的构造函数用一些数据和适当的上下文来调用它。

答案 3 :(得分:0)

Amir,
I am not sure you found the solution or not. You can do this way:


@Override
public View getView(int position, View view, ViewGroup viewGroup) {
  //for each subitem, set click listener & set tag having position as
  // value.
  ImageView imv = (ImageView)view.findViewById(R.id.live_view);
  imv.setTag(i);
  imv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d("INFO","Live view clicked");
                    //This will give you position in listview.
                    int position = (int) v.getTag();
                }
  });

 }

我希望它能帮助您和其他寻求相关答案的人。 也许还有其他解决方案,但肯定可以。