使用自定义ListView的侦听器的单个ID

时间:2014-12-09 17:42:14

标签: android android-listview onclicklistener

我是Android SDK的新手,我最近开始开发一个小应用程序。该应用程序以菜单为中心,该菜单使用自定义ListView实现。我用了this guide as a reference in order to build my model classes and my adapter。作者还发布了他在GitHub上使用的代码,here。我的结果与原始结果相当接近,下面的屏幕来自作者的博客文章:

enter image description here

我成功设置了菜单,现在需要将列表中的每个项目连接到监听器,以便我可以处理点击。为了简单起见,我的活动工具OnClickListener

public class MenuActivity extends ListActivity implements View.OnClickListener 
{
    @Override
    public void onClick(View v) {
        // ...
    }
}

我还可以通过我的菜单项将我的菜单项连接到此方法。 XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:onClick="onClick"
    android:id="@+id/menu_item_layout">

现在,当我点击其中一个列表项时,我输入onClick方法。但是,一旦我在那里,我就无法找到区分项目与其他项目的方法。如您所见,我将click事件应用于其布局,以便在单击其中的项目(我的文本)时触发它。

但是,由于我的所有项目共享相同的XML布局,因此它们似乎也共享相同的ID:@id/menu_item_layout。因此,我无法做到平常......

public void onClick(View v) {
    switch(v.getId()){
        case R.id.myId: /* ... */ break;
        case R.id.myId2: /* ... */ break;
        // ...
    }
}

鉴于此&#34;自定义列表&#34;实现,有没有办法区分菜单项1 点击菜单项2 上的点击?

3 个答案:

答案 0 :(得分:1)

View中为列表项创建ListAdapter时,您可以使用View#setTag在该视图上设置标记。放在那里可以区分一个列表项与另一个列表项,即适配器中的位置。然后使用View.getTagonClick侦听器中获取此唯一标识符。

答案 1 :(得分:1)

OnClickListener无法按预期使用ListView。但是,ListActivity类提供了onListItemClick()方法,其实现方式如下:

@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{

}

position参数将索引保存在与所单击项目对应的基础数据列表中。

答案 2 :(得分:0)

我认为,有两种方法可以做到这一点:

首先:

将clicklistener添加到getview方法内的视图中,这样你也可以拥有该位置(记得将最终的int初始化为getView中的位置并在clickListener中使用该int)

第二:(不保证是否可行)

为getView中的每个textView添加一个标记,并将该位置存储在该textView中。例如:

textView.setTag(new Integer(int position));

然后在你的onClick方法中获取该位置