如何从同一视图内的ListView适配器onClick按钮获取textView值?

时间:2015-06-09 10:14:44

标签: android listview

我有一个列表View,其中包含用作按钮的imageView和TextView。

image

我想要的是当我点击按钮例如列表视图中的第三个项目时,我想获取文本视图中的文本,当我点击与文本视图位于相同位置的按钮时。

我会尝试

 final TextView txt= (TextView) findViewById(R.id.txt);
 String txt2 = txt.getText().toString();

这项工作越来越少。

我的问题很奇怪,我会尝试用图片解释

当我点击按钮而不管位置时,总是返回显示在屏幕上fisrt位置的文本视图(不在列表视图上,在屏幕上)

例如 uno

在那种情况下,(红色方块)如果我点击项目1,2或3中的按钮,它会返回tv_1

其他示例(再次红色正方形屏幕) dos

现在,如果我点击项目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>

4 个答案:

答案 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
        }
    }
});