3

我的问题是我的列表 onclick 侦听器返回 LinearLayout 而不是文本视图。所以我不知道如何捕捉单击的项目,即简单的行 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 中捕获文本视图?!

4

11 回答 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();

         }});
于 2013-08-01T10:51:24.873 回答
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();
    }
 }
});
于 2013-08-01T10:46:30.820 回答
1

在这里,您对 listview 项目中几个可点击区域的问题进行了很好的解释:

http://cyrilmottier.com/2011/11/23/listview-tips-tricks-4-add-several-clickable-areas/

于 2013-08-01T10:46:47.000 回答
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();
}

重要的是您首先需要从您的父 LinearaLayout 获取 TextView。

于 2013-08-01T10:46:07.933 回答
0
((TextView)((LinearLayout)view).getChildAt(1)).getText().toString();
于 2013-08-01T10:46:12.423 回答
0

这样做

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

于 2013-08-01T10:49:12.603 回答
0

我的列表 onclick 侦听器返回 LinearLayout 而不是文本视图

这就是它应该做的。

我不知道如何捕捉单击的项目,即简单的行 xml

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

findViewById()您可以使用on this搜索内部视图View

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

 Object item = listAdapter.getItem(position);
 String text = item.getSomeProperty();
于 2013-08-01T11:06:04.393 回答
0

您需要按顺序做几件事:

  • 使文本视图可点击
  • 使 textview 可聚焦
  • 将 OnClick 附加到 TextView 或 OnItemClicked 到 listview
  • 通过 XML 或代码将包装的 LinearLayoutsetDecentantFocusability设置为。FOCUS_AFTER_CHILDREN
  • 一旦在 OnClick 中,您将拥有 textview,或者如果您要使用 OnItemClicked 路线 - 您将捕捉到焦点项目。

因此,您的解决方案是挖掘您收到的 LinearLayout 以获得所需的 textview,或者修复 linearlayout 以不接管焦点或单击本身。

于 2013-08-01T10:51:43.690 回答
0

如果父视图是LinearLayout,你需要在父视图中找到你的textview,检查下面的代码,我希望它能工作......

String item = ((TextView) view.findViewById(R.id.txtTitle)).getText().toString();
于 2013-08-01T10:53:23.723 回答
0

您可以尝试使用
String item = (TextView)((LinearLayout)view).getChildAt(1).getText().toString();
This is modified from this answer to a similar question

于 2013-08-01T10:54:06.930 回答
-1

在 onItemClickListener

  public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
    {
        TextView tv = (TextView)view.findViewById(R.id.txtTitle)
        Toast.makeText(RingSubCatActivity.this,tv.getText().toString(), Toast.LENGTH_SHORT).show();

     }});

使用视图对象来初始化你的 textview 并获取文本以在 toast 中显示它。

于 2013-08-01T10:48:03.507 回答