listview项目消失了

时间:2011-05-17 03:41:10

标签: android listview

所以..我的listview项目在屏幕滚动后消失了。他们在那里,你瘫痪,倒退,他们走了。轮换后他们重新出现,但我不知道为什么会这样。

package com.teslaprime.prirt;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.content.Context;
import android.content.ContentValues;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.widget.CheckBox;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.ListView;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.Cursor;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;

public class TaskList extends Activity {
  List<Task> tasks = new ArrayList<Task>();
  TaskAdapter adapter = null;
  SQLiteDatabase db = null;

  public void populateList(){
      adapter = new TaskAdapter();
      adapter.clear();
      Cursor cur = db.query("tasks",null,null,null,null,null,"timestamp");
      cur.moveToFirst();
      int anchor = 0;
      while (cur.isAfterLast() == false) {
        if (cur.getInt(cur.getColumnIndex("completed")) == 1) {
            Task task = new Task(cur.getString(cur.getColumnIndex("name")),cur.getString(cur.getColumnIndex("type")));
            task.id = cur.getInt(cur.getColumnIndex("id"));
            task.completed = 1;
            adapter.add(task);
            anchor = anchor+1;
        }
          cur.moveToNext();
      }
      cur.moveToFirst();
      while (cur.isAfterLast() == false) {
          if (cur.getInt(cur.getColumnIndex("completed")) == 0) {
              Task task = new Task(cur.getString(cur.getColumnIndex("name")),cur.getString(cur.getColumnIndex("type")));
              task.id = cur.getInt(cur.getColumnIndex("id"));
              adapter.add(task);
          }
          cur.moveToNext();
      }
      cur.close();
      for (int i = tasks.size(); i <= 8; i++) {
          adapter.add(new Task());
      }

      ListView list = (ListView) findViewById(R.id.tasks);

      list.setAdapter(adapter);

      list.setSelection(anchor);
  }

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent setupProcess = new Intent (TaskList.this, SetupWelcome.class);
    boolean first = checkDatabase() ? true : false;

    db = openOrCreateDatabase("priRT.db",
      SQLiteDatabase.CREATE_IF_NECESSARY,null);
    db.setVersion(1);
    db.setLockingEnabled(true);
    db.execSQL("create table if not exists tasks ("
                + "id integer primary key autoincrement,"
                + "name text,"
                + "time integer,"
                + "completed integer,"
                + "timestamp integer,"
                + "spacer integer,"
                + "type text);");
    db.execSQL("create table if not exists schedule ("
                + "id integer primary key autoincrement,"
                + "hours_free integer);");
    if (first) { startActivityForResult(setupProcess,0); }

    populateList();

    Button add = (Button) findViewById(R.id.addTask);
    add.setOnClickListener(onAdd);
    }

    public View.OnClickListener closeTaskListener = new View.OnClickListener(){
        public void onClick(View v){
            int pos = (Integer) (v.getTag());
            Task task = adapter.getItem(pos);
            ContentValues values = new ContentValues();
            if (task.completed == 1){
                values.put("completed", 0);
                task.completed = 0;
            } else {
                values.put("completed", 1);
                task.completed = 1;
            }
            Long time = new Date().getTime();
            values.put("timestamp", time);
            db.update("tasks", values, "id='"+task.id+"'", null);
            populateList();
        }
    };


    private boolean checkDatabase() {
        SQLiteDatabase checkDB = null;
          try {
            checkDB = SQLiteDatabase.openDatabase(
               "/data/data/com.teslaprime.prirt/databases/priRT.db", null,
               SQLiteDatabase.OPEN_READONLY);
            checkDB.close();
          } catch (SQLiteException e) {}
          return checkDB == null ? true : false;
   }

  private View.OnClickListener onAdd = new View.OnClickListener() {
    public void onClick(View view) {
      Intent addTask = new Intent (view.getContext(), TaskEntry.class);
      startActivityForResult(addTask, 2);
    }
  };

  protected void onActivityResult(int req, int res, Intent data) {
    if (req == 0 && res == RESULT_OK) {
        Intent setup = new Intent (TaskList.this, SetupWizard.class);
        startActivityForResult(setup, 1);
    }
    if (req == 2 && res == RESULT_OK) {
        Task task = new Task(data.getStringExtra("name"),data.getStringExtra("type"));
        adapter.add(task);
        ContentValues values = new ContentValues();
        values.put("name", data.getStringExtra("name"));
        values.put("type", data.getStringExtra("type"));
        values.put("completed", 0);
        values.put("spacer", 0);
        db.insert("tasks", null, values);
        Cursor cur = db.query("tasks", null, null, null, null, null, null);
        cur.moveToLast();
        task.id = cur.getInt(cur.getColumnIndex("id"));
        cur.close();
        populateList();
    }
  }

  class TaskAdapter extends ArrayAdapter<Task> {
    TaskAdapter() {super(TaskList.this,R.layout.task,tasks);}
    private List<Task> taskList;
    private Context context;

    public View getView(int pos, View convertView, ViewGroup parent) {
      View task = convertView;
      if (convertView == null) {
        LayoutInflater inflater = getLayoutInflater();
        task = inflater.inflate(R.layout.task,null);
      }
      if (tasks.get(pos).spacer == 0) {
        TextView taskName = (TextView) task.findViewById(R.id.name);
        TextView taskType = (TextView) task.findViewById(R.id.type);
        taskName.setText(tasks.get(pos).name);
        taskType.setText(tasks.get(pos).type);

        Task taskList = adapter.getItem(pos);

        CheckBox closeTask = (CheckBox) task.findViewById(R.id.closeTask);
          if (taskList.completed == 0) {
              closeTask.setChecked(false);
          } else {
              closeTask.setChecked(true);
          }

        closeTask.setTag(pos);
        closeTask.setOnClickListener(closeTaskListener);
        } else {
            CheckBox closeTask = (CheckBox) task.findViewById(R.id.closeTask);
            task.setVisibility(View.GONE);
            task.setFocusable(false);
            task.setClickable(false);
      }

      return task;
    }
  }
}

1 个答案:

答案 0 :(得分:0)

由于列表出现的表面背景颜色,可能会发生这种情况。尝试在linerlayout中设置背景颜色为白色,在文本视图中设置coolr black,然后再次滚动列表视图。