项目点击监听器上的android listview

时间:2013-08-01 10:41:49

标签: android

我的问题是我的列表onclick listener返回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中的文本视图?

11 个答案:

答案 0 :(得分: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 :(得分: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();
    }
 }
});

答案 2 :(得分:1)

这里列出了listview项目中几个可点击区域的问题:

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

答案 3 :(得分: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。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

喜欢这个

  

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

答案 6 :(得分:0)

按顺序,您需要做几件事:

  • 使textview可点击
  • 使textview成为焦点
  • 将OnClick附加到TextView或OnItemClicked到listview
  • 通过XML或代码将LinearLayout setDecentantFocusability打包到FOCUS_AFTER_CHILDREN
  • 一旦进入OnClick,您将拥有textview,或者如果您要使用OnItemClicked路线 - 您将捕获重点项目。

所以你的解决方案是挖掘你收到的LinearLayout以获得你想要的文本视图,或者修改linearlayout以不接管焦点或点击本身。

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

您可以尝试使用
String item = (TextView)((LinearLayout)view).getChildAt(1).getText().toString();这可以从similar question

的答案改编而来

答案 9 :(得分:0)

  

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

这就是它应该做的事情。

  

我不知道如何捕捉简单行xml

的点击项目

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

您可以在此findViewById()上使用View搜索内部观看次数。

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

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

答案 10 :(得分:-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中显示它。