我是Android SDK的新手,我最近开始开发一个小应用程序。该应用程序以菜单为中心,该菜单使用自定义ListView
实现。我用了this guide as a reference in order to build my model classes and my adapter。作者还发布了他在GitHub上使用的代码,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 上的点击?
答案 0 :(得分:1)
在View
中为列表项创建ListAdapter
时,您可以使用View#setTag
在该视图上设置标记。放在那里可以区分一个列表项与另一个列表项,即适配器中的位置。然后使用View.getTag
在onClick
侦听器中获取此唯一标识符。
答案 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方法中获取该位置