Android 有条件地设置ListView行中的图像
我有一个Android 有条件地设置ListView行中的图像,android,android-asynctask,Android,Android Asynctask,我有一个AsyncTask,它在onPostExecute()中为列表视图设置适配器。 我使用simpledapter: protected void onPostExecute(List<Map<String, String>> result) { super.onPostExecute(result); Activity act = parent.getActivity(); Toast.makeText(act.getApplication
AsyncTask
,它在onPostExecute()
中为列表视图设置适配器。
我使用simpledapter
:
protected void onPostExecute(List<Map<String, String>> result) {
super.onPostExecute(result);
Activity act = parent.getActivity();
Toast.makeText(act.getApplicationContext(), act.getString(R.string.results_completed), Toast.LENGTH_LONG).show();
ListAdapter adapter = new SimpleAdapter (
parent.getActivity(),
result,
R.layout.fragment_results_list_item,
RESULTS_MAPPINGS,
RESULTS_VIEWS }
);
parent.setListAdapter(adapter);
}
受保护的void onPostExecute(列表结果){
super.onPostExecute(结果);
Activity act=parent.getActivity();
Toast.makeText(act.getApplicationContext()、act.getString(R.string.results\u completed)、Toast.LENGTH\u LONG.show();
ListAdapter=新的SimpleAdapter(
parent.getActivity(),
结果,,
R.layout.fragment\u结果\u列表\u项,
结果(1),
结果_视图}
);
setListAdapter(适配器);
}
这里的parent
是一个ListFragment
列表视图中的每一行都有一个图像和一些文本。
我可以设置图像调用和指定图像资源,但此图像对于所有行都是相同的
我想要的是有条件地设置图像。列表结果中的每个映射中都有一个特定键,其值将为“0”
或“1”
。根据此值,我希望将该特定行的图像设置为一个(本地)图像资源或另一个图像资源
实现这一目标的最佳方式是什么?(我能想到的唯一方法是首先始终设置相同的映像,一旦异步任务
完全执行,在列表片段
中迭代映射并更改需要更改的映射。)您可能需要使用BaseAdapter
,并在getView
中指定要使用的映像。这是一个很好的教程
我们的想法是这样做:
@Override
public View getView(int id, View view, ViewGroup parent) {
ViewHolder viewHolder;
if (view == null) {
view = <inflate your layout>;
viewHolder = new viewHolder();
viewHolder.imageView = view.findViewById(<imageViewId>);
view.setTag(viewHolder);
} else {
viewHodler = (ViewHoler) view.getTag();
}
if (content.getKey(id) == 0) { // content in your Map<>
viewHolder.imageView.setImage(<image0>);
} else {
viewHolder.imageView.setImage(<image1>);
}
return view;
}
private static ViewHolder {
public ImageView imageView;
}
@覆盖
公共视图getView(int id、视图视图、视图组父级){
持票人持票人;
如果(视图==null){
视图=;
viewHolder=新的viewHolder();
viewHolder.imageView=view.findViewById();
view.setTag(viewHolder);
}否则{
viewHodler=(ViewHoler)view.getTag();
}
如果(content.getKey(id)==0){//地图中的内容
viewHolder.imageView.setImage();
}否则{
viewHolder.imageView.setImage();
}
返回视图;
}
专用静态视图持有者{
公共影像视图;
}