ListView中的行问题

时间:2010-09-15 13:15:57

标签: android

美好的一天,请帮助我查看这段代码并告诉我我做错了什么。我的列表视图没有返回正确的行位置。它一直给我前面的行条目,而不是点击的那个,当我尝试点击列表中的第一个条目时,它给我错误“android.database.CursorIndexOutOfBoundsException:索引0请求,大小为0”。

import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class ViewItems extends ListActivity implements OnItemClickListener{

 DBAdapter adapter;
 Cursor cursor;
 ListView list;
 static final int ACTIVITY_EDIT = 0;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.view_list);
  adapter = new DBAdapter(this);
  adapter.open();
  fillData();

  list = (ListView)findViewById(android.R.id.list);
  list.setOnItemClickListener(this);


 }


 protected void fillData() {
  Cursor cursor = adapter.retrieveItems();
  startManagingCursor(cursor);

    String[] from = new String[]{DBAdapter.NAME, DBAdapter.DATE, DBAdapter.TIME};
    int[] to = new int[]{R.id.viewNameId, R.id.viewDateId, R.id.viewTimeId};

    customCursorAdapter items = new customCursorAdapter(this, R.layout.view_items, cursor, from, to);
    setListAdapter(items);   
 }



 public class customCursorAdapter extends SimpleCursorAdapter {
  private int layout;
  Context context;

  public customCursorAdapter(Context context, int layout, Cursor cursor, String[]from, int[] to) {
   super(context, layout, cursor, from, to);
   this.layout = layout;
   this.context = context;

  }


  @Override
  public void bindView(View view, Context context, Cursor cursor) {
   ViewHolder holder;

   if(view != null){
    holder = new ViewHolder();
    holder.viewName = (TextView)view.findViewById(R.id.viewNameId);
    holder.viewStartDate = (TextView)view.findViewById(R.id.viewDateId);
    holder.viewStartTime = (TextView)view.findViewById(R.id.viewTimeId);

    view.setTag(holder);
   }else{
    holder = (ViewHolder)view.getTag();
   }

   int namecol = cursor.getColumnIndex(DBAdapter.NAME); 
   String name = cursor.getString(namecol);


   if(holder.viewName != null){
   holder.viewName.setText(name);
   holder.viewName.setTextColor(Color.RED);
   }

   String startDate = cursor.getString(cursor.getColumnIndex(DBAdapter.DATE));
   holder.viewStartDate.setText(startDate);

   String startTime = cursor.getString(cursor.getColumnIndex(DBAdapter.TIME));
   holder.viewStartTime.setText(startTime);
  }


  @Override
  public View newView(Context context, Cursor cursor, ViewGroup parent) {

   LayoutInflater inflater = LayoutInflater.from(context);
   final View view = inflater.inflate(layout, parent, false);

   return view;
  }

  @Override
  public long getItemId(int id){
   return id;
  }

 @Override
  public Object getItem(int position){
   return position;
  }

 }

 static class ViewHolder{
  TextView viewName;
  TextView viewStartDate;
  TextView viewStartTime;

 }


 public void onItemClick(AdapterView parent, View view, int position, long rowId) {

   cursor = adapter.retrieveRow(rowId);

  Intent edit = new Intent(this,AddItem.class);
   edit.putExtra(DBAdapter.KEY_ID, rowId);
   edit.putExtra(DBAdapter.NAME, cursor.getString(cursor.getColumnIndex(DBAdapter.NAME)));
   edit.putExtra(DBAdapter.DATE, cursor.getString(cursor.getColumnIndex(DBAdapter.DATE)));
   edit.putExtra(DBAdapter.TIME, cursor.getString(cursor.getColumnIndex(DBAdapter.TIME)));
   startActivityForResult(edit, ACTIVITY_EDIT);
 }

 }

我已经尝试并审核过示例但没有成功。我也尝试使用OnListItemClick()方法,但这给了我一个“NullPointerException”,我不知道为什么。一段时间以来它一直很令人沮丧。提前感谢您的时间。

0 个答案:

没有答案