我有一个在ListView中使用的以下布局(意味着它对列表中的每个项目使用一次):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<LinearLayout
android:id="@+id/stats"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:text="10 comments"
android:tag="10"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/stats"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:clickable="true"
android:onClick="increaseComments"
/>
</LinearLayout>
</LinearLayout>
如果用户点击ImageView
,我想将TextView
的文字更改为“11条评论”(递增)。鉴于下面ImageView
的onClick方法,如何获取TextView
的标记,然后使用它来更改TextView
的文本?
public void increaseComments(View view) {
// TODO
}
答案 0 :(得分:0)
你可以设置&amp;使用getTag()
和setTag(tagObject)
方法获取您的观看标记。有关详细信息,请参阅android developer reference。
您可以将getTag()
方法应用于布局中的任何视图对象。如果您在XML
或代码中设置了某些内容,则可以获取TAG
,但它是一个对象,因此需要进行类别转换。
例如,在您的情况下,int textViewTag = (int)total.getTag()
修改强>
这非常类似于伪代码来为您提供这个想法。这不是处理适配器的getView
方法的理想方法。请参阅this blog,以便更好地了解ListViews
,ViewHolder
模式和Adapters
。
/* Somewhere in your adapter class, define them Globally */
ImageView imageView;
TextView total;
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = yourActivityInstance.getLayoutInflater().inflate(R.layout.your_list_item_xml, parent, false);
imageView = (ImageView) convertView.findViewById(R.id.image);
total = (TextView) convertView.findViewById(R.id.total);
return convertView;
}
/**
* Called when the ImageView is Clicked.
*/
public void increaseComments() {
/* There you have the Tag of your Text View */
int textViewTag = (int) total.getTag();
}