安卓列表视图中的项点击监听器

3

我的问题是我的列表单击监听器返回的是LinearLayout而不是TextView。因此,我不知道如何捕获被点击的项目。 这是简单的行XML。

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp">

 <ImageView android:id="@+id/imgIcon"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true"
    android:layout_marginRight="15dp"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp" />

 <TextView android:id="@+id/txtTitle"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true"
    android:textStyle="bold"
    android:textSize="22dp"
    android:textColor="#000000"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp" />

</LinearLayout>

那是主要内容。
  listView1.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {

                        String item = ((TextView)view).getText().toString();
                        Log.w("item", item);
                        Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();

                    }
                });

该项导致程序崩溃,因为返回的视图是LinearLayout。如何捕获LinearLayout中的TextView?!


你正在从ListView获取列表项吗? - Shani Goriwal
使用 view.findViewById(R.id.TextViewID)。 - user1448729
11个回答

2
 public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
        {
            TextView c = (TextView)view.findViewById(R.id.txtTitle);

            String sel_item = c.getText().toString();

            Toast.makeText(RingSubCatActivity.this,sel_item, Toast.LENGTH_SHORT).show();

         }});

1
你将收到父视图,然后需要使用该父视图找到你的文本视图。

view.findViewById

然后进行投射并继续。
listView1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,                       long id) {
    if(view !=null)
    {
String item = ((TextView) view.findViewById(R.id.YOUR_VIEW_ID)).getText().toString();
Log.w("item", item);
Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
    }
 }
});

1

0

将您的onClick更改为以下内容:

public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
   TextView textView = (TextView) view.findViewById(R.id.txtTitle);
   String item = textView.getText().toString();
   Log.w("item", item);
   Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
}

重要的是,你首先需要从父级LinearLayout中获取TextView。

0
((TextView)((LinearLayout)view).getChildAt(1)).getText().toString();

0
如果父视图是LinearLayout,您需要在父视图中找到您的TextView,查看下面的代码,希望它能正常工作...
String item = ((TextView) view.findViewById(R.id.txtTitle)).getText().toString();

0

我的列表点击监听器返回的是LinearLayout而不是TextView

这就是它应该做的。

我不知道如何捕获被点击的项目,这是简单的行XML

onItemClick()方法的第二个参数是View。这不是被点击的View,而是适配器提供给ListView的该项的View

您可以通过在此View上使用findViewById()来搜索内部视图。

我看到您正在尝试获取项目视图的文本字符串。最好从适配器中获取数据而不是从视图中获取:

 Object item = listAdapter.getItem(position);
 String text = item.getSomeProperty();

0

像这样做

String val = ((TextView) view.findViewById(R.id.txtTitle)).getText.toString();


0

你需要按照以下步骤进行:

  • 将TextView设置为可点击
  • 将TextView设置为可聚焦
  • 将OnClick事件附加到TextView或OnItemClicked事件附加到ListView
  • 通过XML或代码将包装LinearLayout的setDecentantFocusability设置为FOCUS_AFTER_CHILDREN
  • 一旦进入OnClick事件,你就可以获取到TextView,或者如果你选择使用OnItemClicked事件,你将捕获到被聚焦的项。

因此,你的解决方案要么是深入LinearLayout以获取所需的TextView,要么是修复LinearLayout以避免它自己接管焦点或点击事件。


0
你可以尝试使用以下代码:
String item = (TextView)((LinearLayout)view).getChildAt(1).getText().toString();
这段代码是根据一个类似问题的答案进行了调整。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接