从已触摸的列表项中获取TextView

时间:2015-11-17 06:23:16

标签: android listview

我想获取/设置TextView的特定list_item的值,但我无法抓住TextView。我的list_item就在这里:

    

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/txtProductName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Product name"
            android:textColor="@color/Green"
            android:textSize="20sp"
            android:textStyle="bold"/>

        <TextView
            android:id="@+id/txtOrderQty"
            android:layout_width="80dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_marginRight="60dip"
            android:gravity="right"
            android:padding="5dp"
            android:text="0"
            android:textSize="20sp"
            />
    </RelativeLayout>


    <TextView
        android:id="@+id/txtGenericName"
        android:textStyle="italic"
        android:layout_marginTop="-10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Test"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="0dp" >

        <LinearLayout
            android:layout_width="0dp"
            android:layout_weight="5"
            android:orientation="horizontal"
            android:layout_height="wrap_content">
            <TextView
                style="@style/TextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Code:" />
            <TextView
                android:id="@+id/txtProductCode"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="11111" />
        </LinearLayout>

        <LinearLayout
            android:layout_weight="5"
            android:layout_width="0dp"
            android:orientation="horizontal"
            android:layout_height="wrap_content">

            <TextView
                style="@style/TextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Pack:" />

            <TextView
                android:id="@+id/txtPackSize"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="100gm" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_weight="5"
            android:layout_width="0dp"
            android:layout_height="wrap_content">
            <TextView
                style="@style/TextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TP:" />

            <TextView
                android:id="@+id/txtUnitPrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="0tk" />
        </LinearLayout>
        <LinearLayout
            android:orientation="horizontal"
            android:layout_weight="5"
            android:layout_width="0dp"
            android:layout_height="wrap_content">
            <TextView
                style="@style/TextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="VAT:" />

            <TextView
                android:id="@+id/txtVat"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="0tk" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

从适配器的OnTouchListener设置getView()

listView.setOnTouchListener(new CountingTouchListener(listView, position, mContext, holder.orderQty));

这是我的onTouch()

public boolean onTouch(View view, MotionEvent motionEvent) {
    try {
        touchAny(view);
        if(motionEvent.getAction() == MotionEvent.ACTION_DOWN ){
            touchDown(motionEvent);
        }else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE){
            touchMove(view, motionEvent);
        }else if(motionEvent.getAction() == MotionEvent.ACTION_UP){
            touchUp(motionEvent);
        }

    }catch (Exception e){e.printStackTrace();}

    return false;
}


private void touchMove(View view, MotionEvent motionEvent) {
        TextView tv = (TextView) view.findViewById(R.id.txtOrderQty);
        Log.i(TAG, "val: "+tv.getText().toString()); //gives me value of txtOrderQty from the list_item which is the first of current visible items
        Log.i(TAG, txtOrderQty.getText().toString()); //gives me value of txtOrderQty from the list_item which is the last of current visible items
}

滚动列表时,一次可以看到5个或6个项目。其中我是第一个也是最后一个。但我希望来自被触摸的项目的TextView

1 个答案:

答案 0 :(得分:0)

根据developer.android.com

  

public abstract void onItemClick(AdapterView parent,View view,   int position,long id)

     

当此AdapterView中的项具有时要调用的回调方法   点击了。

     

如果需要,实施者可以调用getItemAtPosition(position)   访问与所选项目关联的数据。

     

参数

     

parent:发生点击的AdapterView。

     

view:已点击的AdapterView中的视图(这将是   适配器提供的视图)

     

position:适配器中视图的位置。 id:行的id   被点击的项目。

您可以调用listview.setOnItemClickListener(...)并将new AdapterView.OnItemClickListener传递给方法,并在上面解释的onItemClick方法体中调用:

view.findViewById(R.id.txtProductName)

获取该项目中的TextView。