Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
项目点击列表器上的android列表视图_Android - Fatal编程技术网

项目点击列表器上的android列表视图

项目点击列表器上的android列表视图,android,Android,我的问题是我的列表onclick listener return LinearLayout不是文本视图。所以我不知道如何捕捉点击的项目 这就是简单的行xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fi

我的问题是我的列表onclick listener return 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();

                    }
                });
listView1.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
字符串项=((TextView)视图).getText().toString();
Log.w(“项目”,项目);
Toast.makeText(getBaseContext(),item,Toast.LENGTH_LONG.show();
}
});

此项导致程序崩溃,因为返回的视图是LinearLayout如何捕获LinearLayout中的文本视图

将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();
}
public void onItemClick(AdapterView父视图、视图视图、整型位置、长id){
TextView TextView=(TextView)view.findViewById(R.id.txtTitle);
String item=textView.getText().toString();
Log.w(“项目”,项目);
Toast.makeText(getBaseContext(),item,Toast.LENGTH_LONG.show();
}

重要的是,您首先需要从父线性布局中获取文本视图。

您将收到父视图,您必须使用

((TextView)((LinearLayout)view).getChildAt(1)).getText().toString();
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();
    }
 }
});
listView1.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
如果(视图!=null)
{
String item=((TextView)view.findViewById(R.id.YOUR_view_id)).getText().toString();
Log.w(“项目”,项目);
Toast.makeText(getBaseContext(),item,Toast.LENGTH_LONG.show();
}
}
});

在这里,listview项目中的几个可单击区域的问题得到了很好的解释:

在监听器中

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

     }});
public void onItemClick(AdapterView父视图、视图视图、整型位置、长id)
{
TextView tv=(TextView)view.findViewById(R.id.txtTitle)
Toast.makeText(RingSubCatActivity.this,tv.getText().toString(),Toast.LENGTH_SHORT.show();
}});
使用view对象初始化textview并获取文本以在toast中显示它。

这样做

字符串val=((文本视图) view.findViewById(R.id.txtTitle)).getText.toString()

public void onItemClick(AdapterView父视图、视图视图、整型位置、长id)
{
TextView c=(TextView)view.findViewById(R.id.txtTitle);
字符串sel_item=c.getText().toString();
Toast.makeText(ringsubcativity.this,sel_项,Toast.LENGTH_SHORT).show();
}});

您需要做以下几件事:

  • 使文本视图可单击
  • 使文本视图可聚焦
  • 将OnClick附加到TextView或onItemClick附加到listview
  • 通过XML或代码,将换行线布局
    设置为可查看性
    在子项之后聚焦
  • 一旦进入OnClick,您将拥有textview,或者如果您选择onitemclick路线,您将捕获重点项目

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

如果父视图是LinearLayout,您需要在父视图中找到您的文本视图, 检查下面的代码,我希望它将工作

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

您可以尝试使用
字符串项=(TextView)((LinearLayout)视图)
这是根据此答案改编为

单击“我的列表”侦听器返回LinearLayout而不是文本视图

这就是它应该做的

我不知道如何捕获单击的项,这是简单的行xml

onItemClick()
方法的第二个参数是
View
。这不是单击的
视图
,而是适配器提供给
列表视图
的该项目的
视图

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

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

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

是否从listview获取列表项??使用view.findViewById(R.id.TextViewID)
 Object item = listAdapter.getItem(position);
 String text = item.getSomeProperty();