ViewFlipper に複数の ListView を設定したい。データベースからセクションの数を取得し、セクションごとに ListView を作成します。リストをナビゲートするために Swipeimplementation を追加しました。つまり、左にスワイプすると次のリストが表示されます。問題は、各リストの行に画像が含まれていることです。そして、別のリストを表示したいときはいつでも、ロードされるまで待たなければなりません。
リストを作成し、入力する前にデータを入力して、流暢にナビゲートできるようにするにはどうすればよいですか?? 前のものと次のものをキャッシュに保持する可能性はありますか??
ListViews を構築するための私の方法
public static void prepareViewFlipper()
{
for(int i = 0; i<KundenActivity.namen.size(); i++)
{
ListView list = new ListView(KundenActivity.myref);
menueAdapter = new MenueAdapter(KundenActivity.myref, ArtikelDatabaseHandler.getInstance(KundenActivity.myref).getArtikel(KundenActivity.namen.get(i)));
list.setAdapter(menueAdapter);
switcher.addView(list);
}
}
マイリストアダプター
public class MenueAdapter extends BaseAdapter{
private Activity activity;
private static LayoutInflater inflater= null;
public ArrayList<Artikel> artikel;
Bitmap bm = null;
URL newurl = null;
public MenueAdapter(Activity activity, ArrayList<Artikel> artikel)
{
this.activity = activity;
this.artikel = artikel;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return artikel.size();
}
@Override
public Artikel getItem(int position) {
// TODO Auto-generated method stub
return artikel.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi = convertView;
if(convertView == null)
{
vi = inflater.inflate(R.layout.menue_list_item, null);
}
ImageView image = (ImageView) vi.findViewById(R.id.menueimage);
Artikel artikel = getItem(position);
Bitmap bm = Webservice.readBitmapImage(artikel.getItemFoto());
image.setImageBitmap(bm);
return vi;
}
}
スワイプの実装
SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener()
{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
String swipe="";
float sensitivity = 50;
if(e1.getX() - e2.getX() > sensitivity)
{
swipe = "Swipe Links";
if(canSwipeLeft())
{
MenueFragment.switcher.setInAnimation(getApplicationContext(), R.animator.slide_in_right);
MenueFragment.switcher.setOutAnimation(getApplicationContext(), R.animator.slide_out_left);
Log.d("==SWIPE==", "FORINDEX: "+MenueFragment.index);
MenueFragment.switcher.showNext();
MenueFragment.index++;
Log.d("==SWIPE==", "AFTERINDEX: "+MenueFragment.index);
}
}
else if(e2.getX() - e1.getX() > sensitivity)
{
swipe = "Swipe Rechts";
if(canSwipeRight())
{
MenueFragment.switcher.setInAnimation(getApplicationContext(), R.animator.slide_in_left);
MenueFragment.switcher.setOutAnimation(getApplicationContext(), R.animator.slide_out_right);
Log.d("==SWIPE==", "FORINDEX: "+MenueFragment.index);
MenueFragment.switcher.showPrevious();
MenueFragment.index--;
Log.d("==SWIPE==", "AFTERINDEX: "+MenueFragment.index);
}
}
Toast.makeText(getApplicationContext(), swipe, Toast.LENGTH_SHORT).show();
return super.onFling(e1, e2, velocityX, velocityY);
}
};
GestureDetector gestureDetector = new GestureDetector(simpleOnGestureListener);
誰かが解決策を持っていることを願っています。