2013-08-01 102 views
3

我的问题是我的列表onclick listener返回LinearLayout不是文本视图。所以我不知道如何捕捉到点击的项目 这就是简单的一行XMLandroid列表视图项目点击列表

<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里面查看?!

+0

你是否从listview获取列表项? –

+0

使用view.findViewById(R.id.TextViewID) – 2013-08-01 10:50:26

回答

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(); 

     }}); 
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的。

0
((TextView)((LinearLayout)view).getChildAt(1)).getText().toString(); 
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

在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和获取文本中举杯显示。 。

+0

不知道为什么这是没有理由downvoted。 – Raghunandan

0

做这样

字符串VAL =((TextView的) view.findViewById(R.id.txtTitle))getText.toString();

+0

这是错误的我编辑 – 2013-08-01 10:54:25

+0

耶..谢谢你把括号.. – karan421

0

有几个你需要做的事情,依次是:

  • 使TextView的点击
  • 使TextView的可聚焦
  • 附加一个onclick到的TextView或OnItemClicked到listview
  • 通过XML或代码将LinearLayout setDecentantFocusability改为FOCUS_AFTER_CHILDREN
  • 一旦进入OnClick,您将拥有文本视图,或者如果您要进入OnItemClicked路线 - 您将捕获焦点项目。

因此,您的解决方案是挖掘您收到的LinearLayout以获取所需的文本视图,或修复线性布局以不接管焦点或点击本身。

0

如果父视图LinearLayout中,你需要找到父视图里面你的TextView, 检查下面的代码,我希望它会工作...

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

您可以尝试使用
String item = (TextView)((LinearLayout)view).getChildAt(1).getText().toString();
这是从这个答案适应于similar question

0

我名单的onclick监听器返回的LinearLayout不是一个文本视图

这就是它应该做的。

我不知道如何捕捉到点击项目多数民众赞成在简单的行XML

onItemClick()方法有View作为其第二个参数。这不是被点击的View,而是那个适配器提供给ListView的物品的View

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

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

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