gpt4 book ai didi

android - 创建 Intent 的最佳实践

转载 作者:太空狗 更新时间:2023-10-29 16:22:58 25 4
gpt4 key购买 nike

我有一个显示大约的自定义 ListView 。 114 个项目,其中我有一个 TextView(用作链接),因此当用户单击该链接时,它会转到另一个 Activity ,例如“阅读更多...”,有点像 ListView 中的链接。

我的问题:下面的代码是否经过优化?换句话说遵循最佳实践?还是可怕?因为我将创建大约 114 个 activitieslayouts 并添加到 AndroidManifest.xml

public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row_custom_listview, null);

final TextView artist = (TextView)vi.findViewById(R.id.artist);
TextView link = (TextView)vi.findViewById(R.id.txtLink);

link.setOnClickListener(new OnClickListener() {
public void onClick(View v) {

if (position == 0) {
Intent intent_01 = new Intent(v.getContext(), more_01_Activity.class);
v.getContext().startActivity(intent_01);
}
if (position == 1) {
Intent intent_02 = new Intent(v.getContext(), more_02_Activity.class);
v.getContext().startActivity(intent_02);
}
if (position == 3) {
Intent intent_03 = new Intent(v.getContext(), more_03_Activity.class);
v.getContext().startActivity(intent_03);
}
...........
............
...........
//goes upto 114

}
});
return vi;
}

最佳答案

findViewById 

是一个非常昂贵的调用,应该尽可能避免,幸运的是有一个 ViewHolder 的想法,你可以像这样使用它:

创建一个名为 ViewHolder 的内部类

private class ViewHolder {
TextView link;
}

然后在你的 getView 中,

ViewHolder viewHolder;
if(convertView==null) {
convertView = inflater.inflate...
viewHolder = new ViewHolder();
viewHolder.link = convertView.findViewById...
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder)convertView.getTag();
}

之后,只需使用 holder 项而不是 TextView link 变量即可。所以

viewHolder.link.setOnClickListener...

此外,您可以编写一个更灵活的 Activity ,而不是创建数百个不同的 Activity ,该 Activity 可以根据从启动它的 Intent 接收到的信息进行 self 调整。示例:

在 onClickListener 中,

  Intent i = new Intent(context, MyFlexibleActivity.class);
i.putExtra("position", position);
startActivity(i);

要获取接收 Activity 中的位置,请执行

int position = getIntent().getIntExtra("position", default_value);

并处理该信息以显示您尝试通过不同 Activity 完成的目标。

如果您有更多问题,请随时在评论中提问。

(更新:字符串数组示例,来自 page )在你的 strings.xml 上,你可以有一个字符串数组,而不是每个项目只有一个字符串: Mercurial 金星 地球 火星

使用它,

Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

关于android - 创建 Intent 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780783/

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