我有一个列表View,其中包含用作按钮的imageView和TextView。
我想要的是当我点击按钮例如列表视图中的第三个项目时,我想获取文本视图中的文本,当我点击与文本视图位于相同位置的按钮时。
我会尝试
final TextView txt= (TextView) findViewById(R.id.txt);
String txt2 = txt.getText().toString();
这项工作越来越少。
我的问题很奇怪,我会尝试用图片解释
当我点击按钮而不管位置时,总是返回显示在屏幕上fisrt位置的文本视图(不在列表视图上,在屏幕上)
例如
在那种情况下,(红色方块)如果我点击项目1,2或3中的按钮,它会返回tv_1
。
其他示例(再次红色正方形屏幕)
现在,如果我点击项目2,3或4中的按钮,它将返回tv_2
即,始终显示屏幕上可见项目列表的顶部
我的代码
public void btn(View view)
{
final TextView tv_id = (TextView) findViewById(R.id.tv_id);
String txt = tv_id.getText().toString();
Log.i(LOGTAG, "" + txt);
}
有什么建议吗?
更新
问题因为我需要使用final
变量来获取该文本视图,然后它的报告首先在屏幕上显示一个项目,但是......为什么?或者如何解决?
更新2我的XML
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1"
android:layout_marginLeft="26dp"
android:layout_marginTop="26dp"
android:layout_marginRight="26dp"
android:id="@+id/lay_fondo">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/cardview_notify"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="90dp"
android:layout_height="match_parent"
android:background="@color/primary_green"
android:id="@+id/lay_prioridad"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp">
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1">
<LinearLayout
android:orientation="vertical"
android:layout_width="580dp"
android:layout_height="match_parent"
android:layout_weight="0.54">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="id"
android:id="@+id/tv_id"
android:layout_gravity="center_vertical"
android:textColor="@color/black"
android:textSize="30sp"
android:layout_marginTop="10dp"
android:layout_marginLeft="26dp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/img_favorito"
android:src="@drawable/star"
android:layout_marginTop="40dp"
android:layout_marginRight="20dp"
android:layout_onClick="btn"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</FrameLayout>
答案 0 :(得分:3)
尝试替换以下行
final TextView tv_id = (TextView) findViewById(R.id.tv_id);
带
TextView tv_id =(TextView)((View)view.getParent())。findViewById(R.id.tv_id);
上述行在给定视图中查找textview,
OR
添加OnItemClickListener()
和列表视图
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final TextView tv_id = (TextView) view.findViewById(R.id.tv_id);
String txt = tv_id.getText().toString();
Log.i(LOGTAG, "" + txt);
}
});
答案 1 :(得分:0)
尝试将onItemClickListener设置为listView
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final TextView txt= (TextView) view.findViewById(R.id.txt);
String txt2 = txt.getText().toString();
Log.i(LOGTAG, "" + txt2);
}
});
OR
在
中设置TextView的点击监听器getView(int position, View convertView, ViewGroup parent)
答案 2 :(得分:0)
我的建议;
tv_id仅引用一个项目(R.if.tv_id)。对于这个问题,无论你把按钮放在哪里,它总是会调用tv_id处理的代码。
我建议您在listView上引用列表视图和setonclicklistener。
ListView listView1 = (ListView) findViewById(R.id.listView1);
listView1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
String item = ((TextView)view).getText().toString();
Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
}
答案 3 :(得分:0)
为什么要以如此复杂的方式获取文本?
我假设你有自定义的ListView
适配器(例如MyAdapter
)和你的物品(例如MyItem
)带有吸气剂(例如MyItem :: getText()
,不要介意C ++风格)。
然后你的方法可能是:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Probably this check is not that necessary but better safe than sorry
if (listView.getAdapter() instanceof MyAdapter) {
MyAdapter adapter = (MyAdapter)listView.getAdapter();
String text = adapter.getItem(position).getText();
// Do whatever you need with the text
}
}
});