みんな私は独学のAndroid開発者で、かなり新しいですが、一生懸命努力しています。アダプターと ViewHolder に関するいくつかのヘルプを探していました。ViewHolder パターンを使用してウィジェットをキャッシュしてから表示する方法を理解するのは非常に難しいと思います。
基本的に、SQLite DB からデータを読み取るカーソルがあります。リストビューに結果を表示するために SimpleCursorAdapter を使用しましたが、うまくいきました。唯一の問題は、スクロールが非常に遅いことでした。
現在、ViewHolder パターンを実装しようとしていますが、DB から ViewHolder にデータをバインドして表示する方法がわかりません。
助けてください!私は2ヶ月間答えを探していました!
コード (簡単にするために無関係なコードを外に残しました):
public class Shifts extends ListActivity implements OnClickListener,
SimpleGestureListener {
private Typeface tf = Entry.tf, tf2 = Entry.tf2, roboto = Entry.roboto;
public static int count = 1;
int dbHourTime = 0;
private SimpleGestureFilter detector;
public static DBAdapter DB;
public static Cursor cursor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.shifts);
detector = new SimpleGestureFilter(this, this);
DB = new DBAdapter(this);
DB.open();
cursor = DB.getAllShifts();
startManagingCursor(cursor);
cursor.moveToLast();
count = cursor.getPosition();
int g = count;
cursor.moveToNext();
String[] columns = new String[] { DB.KEY_DATE, DB.KEY_HOURS,
DB.KEY_DAY, DB.KEY_ROWID, DB.KEY_START, DB.KEY_END };
int[] to = new int[] { R.id.dateDisp, R.id.shiftDisp, R.id.day,
R.id.rawId, R.id.start, R.id.finish };
TextView SF = (TextView) findViewById(R.id.total);
SF.setTypeface(tf);
TextView sum = (TextView) findViewById(R.id.sum);
sum.setTypeface(tf);
TextView empty = (TextView) findViewById(android.R.id.empty);
empty.setTypeface(roboto);
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,
R.layout.list_entry, cursor, columns, to);
this.setListAdapter(mAdapter);
}
アダプターのコード:
private static class EfficientAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Bitmap layoutBG;
private Bitmap mIcon2;
public EfficientAdapter(Context context) {
mInflater = LayoutInflater.from(context);
layoutBG = BitmapFactory.decodeResource(context.getResources(),
R.drawable.li2);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return cursor.getCount();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return cursor.getPosition();
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return cursor.getPosition();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_entry, null);
holder = new ViewHolder();
holder.LL = (LinearLayout) convertView
.findViewById(R.id.layoutBG);
holder.rowID = (TextView) convertView.findViewById(R.id.rawId);
holder.info = (TextView) convertView.findViewById(R.id.Info);
holder.dateDisp = (TextView) convertView
.findViewById(R.id.dateDisp);
holder.day = (TextView) convertView.findViewById(R.id.day);
holder.finish = (TextView) convertView
.findViewById(R.id.finish);
holder.hourMin = (TextView) convertView
.findViewById(R.id.hourMin);
holder.shiftDisp = (TextView) convertView
.findViewById(R.id.shiftDisp);
holder.start = (TextView) convertView.findViewById(R.id.start);
holder.timestarted = (TextView) convertView
.findViewById(R.id.timestarted);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return null;
}
}
ホルダー クラスのコード:
static class ViewHolder {
TextView rowID;
TextView info;
TextView dateDisp;
TextView day;
TextView timestarted;
TextView start;
TextView finish;
TextView hourMin;
TextView shiftDisp;
LinearLayout LL;
}