创建列表视图后查看持有者警告
View holder warning after creating list view
创建列表视图并为每个项目的文本分配不同颜色后,View rowView = inflater.inflate(R.layout.list_item, parent, false);
中的 inflater.inflate(R.layout.list_item, parent, false)
以黄色突出显示,我收到与视图持有者相关的警告。应该将受影响的代码更改为什么才能消除此警告?
Unconditional layout inflation from view adapter: Should use View Holder pattern for smoother scrolling
public class FragmentColourChooserList extends android.support.v4.app.Fragment {
public FragmentColourChooserList() {
// Required empty constructor
}
ListView list_colourchooser;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_colour_chooser_list, container, false);
String[] listContent = {
getActivity().getResources().getString(R.string.item_0),
getActivity().getResources().getString(R.string.item_1),
getActivity().getResources().getString(R.string.item_2),
getActivity().getResources().getString(R.string.item_3),
getActivity().getResources().getString(R.string.item_4),
getActivity().getResources().getString(R.string.item_5),
getActivity().getResources().getString(R.string.item_6),
getActivity().getResources().getString(R.string.item_7),
getActivity().getResources().getString(R.string.item_8),
getActivity().getResources().getString(R.string.item_9)
};
list_colourchooser = (ListView)v.findViewById(R.id.list_colourchooser);
MyColoringAdapter adapter = new MyColoringAdapter(getActivity(),listContent);
list_colourchooser.setAdapter(adapter);
return v;
}
private class MyColoringAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MyColoringAdapter(Context context, String[] values) {
super(context, R.layout.list_item, values);
this.context = context;
this.values = values;
}
class Holder
{
TextView txtView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_item, parent, false);
Holder holder = new Holder();
holder.txtView = (TextView) rowView.findViewById(R.id.list_item);
txtView.setText(values[position]);
int textColorId = R.color.white; // Default color
switch (position) {
case 0:
textColorId = R.color.brown; break;
case 1:
textColorId = R.color.red; break;
case 2:
textColorId = R.color.yellow; break;
case 3:
textColorId = R.color.green; break;
case 4:
textColorId = R.color.pink; break;
case 5:
textColorId = R.color.grey; break;
case 6:
textColorId = R.color.purple; break;
case 7:
textColorId = R.color.white; break;
case 8:
textColorId = R.color.darkblue; break;
case 9:
textColorId = R.color.lightblue; break;
}
txtView.setTextColor(getResources().getColor(textColorId));
return rowView;
}
}
}
尝试使用 viewHolder class 而不是直接从 rowView 获取值到不同的类型。
创建持有人class
class Holder
{
private TextView txtView;
public TextView getTxtView()
{
return txtView;
}
}
尝试替换
TextView textView = (TextView) rowView.findViewById(R.id.list_item);
与
Holder holderObject = new Holder();
holderObject.getTxtView() = (TextView) rowView.findViewById(R.id.list_item);
创建列表视图并为每个项目的文本分配不同颜色后,View rowView = inflater.inflate(R.layout.list_item, parent, false);
中的 inflater.inflate(R.layout.list_item, parent, false)
以黄色突出显示,我收到与视图持有者相关的警告。应该将受影响的代码更改为什么才能消除此警告?
Unconditional layout inflation from view adapter: Should use View Holder pattern for smoother scrolling
public class FragmentColourChooserList extends android.support.v4.app.Fragment {
public FragmentColourChooserList() {
// Required empty constructor
}
ListView list_colourchooser;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_colour_chooser_list, container, false);
String[] listContent = {
getActivity().getResources().getString(R.string.item_0),
getActivity().getResources().getString(R.string.item_1),
getActivity().getResources().getString(R.string.item_2),
getActivity().getResources().getString(R.string.item_3),
getActivity().getResources().getString(R.string.item_4),
getActivity().getResources().getString(R.string.item_5),
getActivity().getResources().getString(R.string.item_6),
getActivity().getResources().getString(R.string.item_7),
getActivity().getResources().getString(R.string.item_8),
getActivity().getResources().getString(R.string.item_9)
};
list_colourchooser = (ListView)v.findViewById(R.id.list_colourchooser);
MyColoringAdapter adapter = new MyColoringAdapter(getActivity(),listContent);
list_colourchooser.setAdapter(adapter);
return v;
}
private class MyColoringAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MyColoringAdapter(Context context, String[] values) {
super(context, R.layout.list_item, values);
this.context = context;
this.values = values;
}
class Holder
{
TextView txtView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_item, parent, false);
Holder holder = new Holder();
holder.txtView = (TextView) rowView.findViewById(R.id.list_item);
txtView.setText(values[position]);
int textColorId = R.color.white; // Default color
switch (position) {
case 0:
textColorId = R.color.brown; break;
case 1:
textColorId = R.color.red; break;
case 2:
textColorId = R.color.yellow; break;
case 3:
textColorId = R.color.green; break;
case 4:
textColorId = R.color.pink; break;
case 5:
textColorId = R.color.grey; break;
case 6:
textColorId = R.color.purple; break;
case 7:
textColorId = R.color.white; break;
case 8:
textColorId = R.color.darkblue; break;
case 9:
textColorId = R.color.lightblue; break;
}
txtView.setTextColor(getResources().getColor(textColorId));
return rowView;
}
}
}
尝试使用 viewHolder class 而不是直接从 rowView 获取值到不同的类型。
创建持有人class
class Holder
{
private TextView txtView;
public TextView getTxtView()
{
return txtView;
}
}
尝试替换
TextView textView = (TextView) rowView.findViewById(R.id.list_item);
与 Holder holderObject = new Holder(); holderObject.getTxtView() = (TextView) rowView.findViewById(R.id.list_item);