私のAndroidアプリケーションのナビゲーションでは、ListViewを使用していて、アクティビティのonCreateメソッドでBaseAdapterを作成して設定しています。BaseAdapter.notifyDataSetChangedは要素の順序を逆順にします
BaseAdapterは、要素(cache.getNavigationを())を取得するためのArrayListにアクセスします。
public class NavigationAdapter extends BaseAdapter {
Context mContext;
public NavigationAdapter(Context c) {
mContext = c;
}
@Override
public int getCount() {
return cache.getNavigation() != null ? cache.getNavigation().size()
: 0;
}
@Override
public Object getItem(int position) {
return cache.getNavigation() != null ? cache.getNavigation().get(
position) : 0;
}
@Override
public long getItemId(int position) {
return cache.getNavigation() != null ? cache.getNavigation().get(
position).getId() : 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if (convertView == null) {
LayoutInflater li = getLayoutInflater();
v = li.inflate(R.layout.list_nav_icon, null);
TextView tv = (TextView) v.findViewById(R.id.list_nav_text);
tv.setText(((TemplateInstanceDto) getItem(position))
.getName());
ImageView icon = (ImageView) v
.findViewById(R.id.list_nav_icon);
byte[] binary = ((TemplateInstanceDto) getItem(position))
.getIcon();
Bitmap bm = BitmapFactory.decodeByteArray(binary, 0,
binary.length);
icon.setImageBitmap(bm);
ImageView arrow = (ImageView) v
.findViewById(R.id.list_nav_arrow);
arrow.setImageResource(R.drawable.arrow);
} else {
v = convertView;
}
return v;
}
}
ので、ナビゲーションはキャッシュからの起動時に構築されています。私はpopulateData()
でより多くの何もしないときは、
private class RemoteTask extends
AsyncTask<Long, Integer, List<TemplateInstanceDto>> {
protected List<TemplateInstanceDto> doInBackground(Long... ids) {
try {
RemoteTemplateInstanceService service = (RemoteTemplateInstanceService) ServiceFactory
.getService(RemoteTemplateInstanceService.class,
getClassLoader());
List<TemplateInstanceDto> templates = service
.findByAccountId(ids[0]);
return templates;
} catch (Exception e) {
return null;
}
}
protected void onPostExecute(List<TemplateInstanceDto> result) {
if (result != null && result.size() > 0) {
cache.saveNavigation(result);
populateData();
} else {
Toast text = Toast.makeText(ListNavigationActivity.this,
"Server communication failed.", 3);
text.show();
}
}
}
リストビューdoesn'tアップデートを: はその間私は、サーバーからのナビゲーションのArrayListを取得し、それがキャッシュに新しいナビゲーションを節約変更されたときにAsyncTaskを開始します。 ((BaseAdapter) ListView.getAdapter()).notifyDataSetChanged()
と呼ぶと、ビューは更新されますが、順序は逆になります。最初の項目は最後であり、最後は最初の項目です。
開催必要!前もって感謝します。
Perfect answer。私はconvertViewに慣れていませんでしたが、その間に私はそれが何であるかを理解しています。ありがとうございました。 – Konsumierer