gpt4 book ai didi

android - 如何使用 Tag 而不是 R.id。在自定义 ArrayAdapter 的构造函数中?

转载 作者:搜寻专家 更新时间:2023-11-01 09:05:23 25 4
gpt4 key购买 nike

在我的 Android 项目中,我需要通过标签而不是 ID 在 Activity 中查找 View 。 (如果你问我为什么不简单地使用findViewById,这不是我喜欢的,而且描述起来很复杂,但目前我不能依赖R.id。 常量!)到目前为止,为了在我的代码中找到 View ,我已经成功地使用了它:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.index);
mainViewGroup = (ViewGroup)getWindow().getDecorView();
TextView indexCaption = (TextView) mainViewGroup.findViewWithTag("index_caption");
// Now I have my TextView and can use it without problem
}

但现在,问题是我在同一个 Activity 中的自定义 ArrayAdapter:

    class IconicAdapter extends ArrayAdapter<String> {
IconicAdapter() {
// How I can use Tag instead of R.layout.index_row_caption here?!!!
super(IndexActivity.this, R.layout.index_row, R.id.index_row_caption, arrayList);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
// Some customizations...
return (row);
}
}
该 IconicAdapter 的

index_row.xml:

android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/content_bg" >

<TextView
android:id="@+id/index_row_caption"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/index_row_icon"
android:layout_toRightOf="@+id/index_row_search"
android:gravity="right"
android:tag="index_row_caption"
android:textAppearance="?android:attr/textAppearanceLarge" />

<ImageView
android:id="@+id/index_row_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:tag="index_row_icon" />

<ImageView
android:id="@+id/index_row_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:src="@drawable/index_row_search"
android:tag="index_row_search" />

如何避免在构造函数中使用 R.id.index_row_caption 并将其替换为与其标签相关的内容?

编辑:最后,我得到了这段代码,它运行良好:(感谢 pawelzieba 帮助了我)

    class IconicAdapter extends ArrayAdapter<String> {
IconicAdapter() {
super(IndexActivity.this, R.layout.index_row, 0, arrayList);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View view;
if (convertView == null) {
LayoutInflater mInflater = IndexActivity.this.getLayoutInflater();
view = mInflater.inflate(R.layout.index_row, parent, false);
} else {
view = convertView;
}

//find views
TextView text = (TextView) view.findViewWithTag("index_row_caption");

//fill views with data
text.setText(arrayList.get(position));

return view;
}
}

最佳答案

扩展 ArrayAdapter 并覆盖 getView() 方法。

public View getView(int position, View convertView, ViewGroup parent) {
View view;

if (convertView == null) {
view = mInflater.inflate(R.layout.index_row, parent, false);
} else {
view = convertView;
}

//find views
TextView text = (TextView) view.findViewWithTag("index_row_caption");

//fill views with data
//example:
T item = getItem(position);
text.setText(item.toString());


return view;
}

然后传递给构造函数的行资源 ID 未被使用。

为了获得更好的性能,使用 View Holder Pattern 在创建行的 View 上仅调用一次 findViewWithTag:http://www.vogella.com/articles/AndroidListView/article.html#adapterperformance_hoder

关于android - 如何使用 Tag 而不是 R.id。在自定义 ArrayAdapter 的构造函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com