gpt4 book ai didi

java - 如何改进 ListView 的填充?

转载 作者:行者123 更新时间:2023-12-01 22:09:46 24 4
gpt4 key购买 nike

我知道有几种使用标题和图标填充 Android ListView 对象的方法,但在尝试简化和改进我的代码时我感到陷入困境。

这是场景:

1 - 创建两个数组

enter image description here

2 - 创建 RowItem 类

  public class IconRow {

private String title;
private int icon;

public IconRow(String title, int icon) {
this.title = title;
this.icon = icon;

}
public String getTitle() {
return title;
}

public int getIcon() {
return icon;
}

}

3 - 创建ListAdapter

public class ListAdapter extends BaseAdapter {

Context context;
List<IconRow> rowItem;
String description;
long option;

public ListAdapter(Context context, List<IconRow> rowItem, String description, long option)
{
this.context = context;
this.rowItem = rowItem;
this.description = description;
this.option = option;

}

@Override
public int getCount() {

return rowItem.size();
}

@Override
public Object getItem(int position) {

return rowItem.get(position);
}

@Override
public long getItemId(int position) {

return rowItem.indexOf(getItem(position));
}

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

if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

convertView = mInflater.inflate(R.layout.lv_arrow, null);


ImageView imgIcon = (ImageView) convertView.findViewById(R.id.imageView1);
TextView txtTitle = (TextView) convertView.findViewById(R.id.textView1);

IconRow row_pos = rowItem.get(position);
// setting the image resource and title
imgIcon.setImageResource(row_pos.getIcon());
txtTitle.setText(row_pos.getTitle());
}

return convertView;
}

4 - 创建行布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@android:color/white" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dp"
android:layout_marginRight="10dp"
android:fontFamily="sans-serif-light"
android:text="TextView"
android:textColor="@android:color/black"
android:textSize="24dp" />

<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_gravity="right|center"
android:layout_marginLeft="20dp"
android:scaleType="fitEnd"
android:src="@drawable/ic_go"
android:layout_marginRight="0dp" />

</LinearLayout>

5 - 在 fragment 中创建列表

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_parameters_settings, container, false);

lv_settings_1 = (ListView) rootView.findViewById(R.id.lv_settings_1);

menutitles = getResources().getStringArray(R.array.array_lv_settings_1);
menuIcons = getResources().obtainTypedArray(R.array.arrow_icons);

menu_iconRow = new ArrayList<>();
for (int i = 0; i < menutitles.length; i++) {
IconRow items = new IconRow(menutitles[i], menuIcons.getResourceId(
i, -1));
menu_iconRow.add(items);
}

adapter_settings_1 = new ListAdapter(getActivity(), menu_iconRow, "No Description", 0);

lv_settings_1.setAdapter(adapter_settings_1);

return rootView;
}

我的做法是错误的吗?无论如何我可以简化这段代码吗?

最佳答案

我通常使用你的方式来管理ListView。也许您知道这一点,但请看一下此页面 http://developer.android.com/training/improving-layouts/smooth-scrolling.html

Your code might call findViewById() frequently during the scrolling of ListView, which can slow down performance. Even when the Adapter returns an inflated view for recycling, you still need to look up the elements and update them. A way around repeated use of findViewById() is to use the "view holder" design pattern.

static class ViewHolder {
TextView text;
TextView timestamp;
ImageView icon;
ProgressBar progress;
int position;
}

关于java - 如何改进 ListView 的填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32055933/

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