java - 如何将数据从sqlite缓存到listview?

标签 java android listview caching

大家好,我有一个 Activity ,它扩展了 ListActivity 并显示一个从我的 SQLite DB 表填充的 ListView 。

我的 ListView 中的每个条目都有相同的背景文件作为我的 GUI 设计的一部分。 问题是我的 ListView 中的滚动非常滞后。我认为这是因为每个 ListView 条目都是“动态”创建的,这会导致滞后。

您能否查看我的代码并告诉我如何缓存它以获得更好的结果?或者也许还有其他解决方案?

代码:

package android.GUI;


public class Shifts extends ListActivity implements OnClickListener,
    SimpleGestureListener {

private Typeface tf = Entry.tf, tf2 = Entry.tf2;
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();

    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 };
    new cursorLoad().execute("this");

    TextView SF = (TextView) findViewById(R.id.total);
    SF.setTypeface(tf);

    TextView sum = (TextView) findViewById(R.id.sum);
    sum.setTypeface(tf);

    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,
            R.layout.list_entry, cursor, columns, to);
    this.setListAdapter(mAdapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.view_shifts_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.back:

        finish();
        return true;
    case R.id.clear:
        DBAdapter DB = new DBAdapter(this);
        DB.open();
        DB.deleteAll();
        startActivity(getIntent());
        finish();

        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

}

@Override
public void onSwipe(int direction) {

    Intent intent = new Intent();

    switch (direction) {

    case SimpleGestureFilter.SWIPE_RIGHT:

        intent.setClass(this, Main.class);
        startActivity(intent);
        break;
    case SimpleGestureFilter.SWIPE_LEFT:

        intent.setClass(this, Entry.class);
        startActivity(intent);
        break;
    case SimpleGestureFilter.SWIPE_DOWN:

        break;
    case SimpleGestureFilter.SWIPE_UP:

        break;
    }

}

@Override
public boolean dispatchTouchEvent(MotionEvent me) {
    this.detector.onTouchEvent(me);
    return super.dispatchTouchEvent(me);
}

@Override
public void onDoubleTap() {
    // TODO Auto-generated method stub

}

public class cursorLoad extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        cursor = DB.getAllShifts();
        startManagingCursor(cursor);
        cursor.moveToLast();
        count = cursor.getPosition();
        int g = count;

        cursor.moveToNext();
        return null;
    }

}

 }

最佳答案

最后我需要的是 ViewHolder 类以及 getView\bindView。

关于java - 如何将数据从sqlite缓存到listview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473659/

相关文章:

android - 如何在 android 的 Canvas 上创建一个按钮并将该按钮链接到要显示/隐藏的图像?

java - 如何在android中的 ScrollView 中使用listview?

c++ - 无法在 C++ 中使用 LVM_GETITEMTEXT 而不导致目标应用程序崩溃

asp.net - 如何使用 ListView 呈现具有多个行跨列的数据表

java - java中不同类的两个矩阵相乘

Java创建列表有更多字段

java - 我的任务输出错误,无法解决

java - 是否有关于使用套接字与 Google App Engine for Java 服务进行客户端/服务器连接的教程?

Android 我怎样才能从图库中获取视频文件的缩略图

java - 是什么导致注册到 volley 请求的 ErrorListener 被触发?