列表视图项目消失

问题描述:

所以..我的列表视图项目从屏幕滚动后消失。他们在那里,你滑落,回来,他们走了。旋转后他们重新出现,但我不知道为什么会发生这种情况。列表视图项目消失

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; 
    } 
    } 
} 
+0

我也有同样的问题。任何解决方案呢? – Arun 2011-05-19 10:59:39

这可能是由于表面出现的表面的背景颜色而发生的。尝试在衬垫布局和文本视图中将背景颜色设置为白色,然后再次滚动列表视图。