我的问题是我的列表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中的文本视图?
答案 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)
按顺序,您需要做几件事:
setDecentantFocusability
打包到FOCUS_AFTER_CHILDREN
。所以你的解决方案是挖掘你收到的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中显示它。