1

我有一个使用 simpleAdapter 构建的列表视图,每一行都由一个包含 TableRow 和一些 TextView 的布局定义。

我应该怎么做才能知道单击了哪个 TextView(在布局中)?

如果我在 Listview 上使用 OnItemClickListener,我可以获得 listview 行(位置),但是它不会告诉我点击了该行上的哪个 TextView。

我想根据用户在列表视图中单击的 TextView 采取不同的操作

listview

-----------------------
TextView1 : TextView2 |     <--Row1
-----------------------
TextView1 : TextView2 |     <--Row2
-----------------------
TextView1 | TextView2 |     <--Row3
-----------------------

我想知道,第 2 行的 TextView2 被点击了。

希望我能很好地解释自己。

谢谢

4

4 回答 4

3

您可以在列表活动中使用以下代码

  setListAdapter(new ArrayAdapter<String>(this, R.layout.your name, String Name));

  ListView lv = getListView();
  lv.setTextFilterEnabled(true);



  lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {

      // When clicked, show a toast with the TextView text
        Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
          Toast.LENGTH_SHORT).show();

    }
  });
}
于 2012-01-20T05:12:10.953 回答
1

如果单击正在由 处理onItemClick,则您无法从中知道单击的是哪个ViewWITHIN ViewOnItemClickListener仅处理单击列表项。您可能会尝试使用一种自定义方式adapter,在该自定义方式中,您可以抓住行中的所有视图getView()并在那里设置onClickListeners它们。或者,如果可能,您可以onClickListeners直接在您的View类中定义。

于 2012-01-20T04:45:07.857 回答
0

您可以在适配器中处理不同视图的点击。适配器必须自定义

于 2012-01-20T05:12:38.740 回答
0

我需要做一些类似的事情来为列表视图中的元素设置标签,这样我就可以找到点击了哪个按钮

    myAdapter = new SimpleAdapter(this, myArrayList, R.layout.list_item,
    new String[] {"ItemID", "ItemText", "ItemImage"},
    new int[] {R.id.item_id, R.id.item_text, R.id.item_image})
    {
    @Override
      public View getView (int row, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        view.findViewById(R.id.item_id).setTag(row);
        view.findViewById(R.id.item_text).setTag(row);
        view.findViewById(R.id.item_image).setTag(row);
        return view;
      }
    };

我为布局中的每个项目添加了一个 onClick 事件

<TextView
   ...
   android:clickable="true"
   android:onClick="myClickEvent"
   ...
/>

然后在我的 onClick 事件中,我有类似的东西

public void myClickEvent(View v) {
  Object o = v.getTag();
  if (o instanceof Integer) {
    int row = (Integer) o;
    // do something
  }

您可以在视图中为每个项目使用一个 onClick 事件来确定单击了哪个项目,或者您可以为所有项目设置一个 onClick 事件并修改标签以同时包含项目和行。

于 2019-09-12T22:27:34.943 回答