2013-09-01 96 views
0

我試圖用我的加載按鈕的onclicklistener中來自sqlite的數據填充我的列表視圖。如何從我的數據庫使用sqlite填充ListView

但是,我從我看過的例子中感到有點困惑。這裏是我的代碼TotalResults.java

DatabaseManager db = new DatabaseManager(this); 
String name; 
int score; 
TextView result; 
TextView saved; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_total_results); 

    result = (TextView) findViewById (R.id.textResult); 
    saved = (TextView) findViewById (R.id.textLoad); 
    Button save = (Button) findViewById (R.id.buttonSave); 
    Button load = (Button) findViewById (R.id.buttonLoad); 
    Button delete = (Button) findViewById (R.id.buttonDelete); 
     Intent intent = getIntent(); 
     name = intent.getExtras().getString("name"); 
     score = intent.getExtras().getInt("score"); 

     result.setText("Name: "+name+" , Score: "+score); 

     save.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) { 

       db.addContact(new PlayerData(name,score)); 
       Log.d("Inserting: ", name); 
       Log.d("Inserting: ", Integer.toString(score)); 

      } 
     }); 



     load.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) { 

       List<PlayerData> contacts = db.getAllContacts(); 
       //check to ensure there are users 

       setListAdapter(new ListAdapter(this, 
         android.R.layout.simple_list_item_1, contacts)); 
       if(contacts.size()==0) { 
        String text = "No players stored."; 
        Toast.makeText(TotalResults.this, text, Toast.LENGTH_SHORT).show(); 
       } else { 
        PlayerData player = contacts.get(0); 
        String showName = player.getName(); 
        int showScore = player.getscore(); 
        Log.d("Getting:", showName); 
        Log.d("Getting:", Integer.toString(showScore)); 
        saved.setText("Player Name: "+showName+" Player Score: "+showScore); 
       } 
      } 
     }); 

      delete.setOnClickListener(new OnClickListener(){ 

       public void onClick(View v) { 

        List<PlayerData> contacts = db.getAllContacts(); 
        //check to ensure there are users 
        if(contacts.size()==0) { 
         String text = "No players to delete."; 
         Toast.makeText(TotalResults.this, text, Toast.LENGTH_SHORT).show(); 
        } else { 
         PlayerData player = contacts.get(0); 
         String showName = player.getName(); 
         int showScore = player.getscore(); 
         Log.d("Deleting:", showName); 
         Log.d("Deleting:", Integer.toString(showScore)); 
         db.deleteContact(player); 
        } 

       } 
      }); 

這是我的數據庫代碼。

public class DatabaseManager extends SQLiteOpenHelper { 

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "contactsManager"; 

// Contacts table name 
private static final String TABLE_CONTACTS = "contacts"; 

// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_PH_NO = "phone_number"; 

public DatabaseManager(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_PH_NO + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 

    // Create tables again 
    onCreate(db); 
} 

/** 
* All CRUD(Create, Read, Update, Delete) Operations 
*/ 

// Adding new contact 
void addContact(PlayerData contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); // Contact Name 
    values.put(KEY_PH_NO, contact.getscore()); // Contact Phone 

    // Inserting Row 
    db.insert(TABLE_CONTACTS, null, values); 
    db.close(); // Closing database connection 
} 

// Getting single contact 
PlayerData getContact(int id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, 
      KEY_NAME, KEY_PH_NO }, KEY_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, null); 
    if (cursor != null) 
     cursor.moveToFirst(); 

    PlayerData contact = new PlayerData(Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1), cursor.getInt(2)); 

    cursor.close(); 
    // return contact 
    return contact; 
} 

// Getting All Contacts 
public List<PlayerData> getAllContacts() { 
    List<PlayerData> contactList = new ArrayList<PlayerData>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      PlayerData contact = new PlayerData(); 
      contact.setID(Integer.parseInt(cursor.getString(0))); 
      contact.setName(cursor.getString(1)); 
      contact.setscore(cursor.getInt(2)); 
      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    // return contact list 
    return contactList; 
} 

// Updating single contact 
public int updateContact(PlayerData contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 
    values.put(KEY_PH_NO, contact.getscore()); 

    // updating row 
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
} 

// Deleting single contact 
public void deleteContact(PlayerData contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_CONTACTS, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
    db.close(); 
} 


// Getting contacts Count 
public int getContactsCount() { 
    String countQuery = "SELECT * FROM " + TABLE_CONTACTS; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(countQuery, null); 
    cursor.close(); 

    // return count 
    return cursor.getCount(); 
} 

}

我在這個方法得到一個錯誤:

load.setOnClickListener(new OnClickListener(){ 

       public void onClick(View v) { 

        List<PlayerData> contacts = db.getAllContacts(); 
        //check to ensure there are users 

        setListAdapter(new ListAdapter(this, 
          android.R.layout.simple_list_item_1, contacts)); 
        if(contacts.size()==0) { 
         String text = "No players stored."; 
         Toast.makeText(TotalResults.this, text, Toast.LENGTH_SHORT).show(); 
        } else { 
         PlayerData player = contacts.get(0); 
         String showName = player.getName(); 
         int showScore = player.getscore(); 
         Log.d("Getting:", showName); 
         Log.d("Getting:", Integer.toString(showScore)); 
         saved.setText("Player Name: "+showName+" Player Score: "+showScore); 
        } 
       } 
      }); 

,我也得到一個錯誤說:不能實例類型ListAdapter,ListAdapter不能被解析爲一個類型。

請大家幫忙。提前致謝。 :)

+0

發佈您的數據庫代碼 – Raghunandan

+0

請發表您的疑問或困惑? – Mothy

+0

已添加附加信息。 – Jeongbebs

回答

0

使用CustomAdapter

public class Display extends Activity implements OnItemClickListener{ 

    DatabaseManager db; 
    List<PlayerData> contacts; 
    ArrayList<String> con= new ArrayList<String>(); 
    LayoutInflater mInflater; 
    CheckBox cb; 
    TextView tv1; 
    CustomAdapter cus; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listview); 
     ListView lv= (ListView) findViewById(R.id.lv); 
     db = new DatabaseManager(this); 

      contacts = db.getAllContacts();  
     cus = new CustomAdapter(); 
     lv.setAdapter(cus); 
     lv.setOnItemClickListener(this); 
     lv.setItemsCanFocus(false); 
     lv.setTextFilterEnabled(true); 
     Button b= (Button) findViewById(R.id.button1); 
     b.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) { 
       StringBuilder sb = new StringBuilder(); 
       for(int i = 0; i < contacts.size(); i++) 

       { 
       if(cus.mCheckStates.get(i)==true) 
       { 
        sb.append(contacts.get(i).getPhoneNumber()); 
        sb.append("\n"); 

       }      
      } 
       Toast.makeText(getApplicationContext(), sb, 
          Toast.LENGTH_LONG).show(); 
       Intent intent = new Intent(Display.this,SendMessage.class); 
       if(con!=null) 
       { 
       intent.putStringArrayListExtra("list",con); 
       startActivity(intent); 
       } 
      } 
     }); 

    } 
    public void onItemClick(AdapterView parent, View view, int 
      position, long id) { 
       cus.toggle(position); 

      } 
    class CustomAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener 
    { 
      private SparseBooleanArray mCheckStates; 
     CustomAdapter() 
     { 
      mCheckStates = new SparseBooleanArray(contacts.size()); 
      mInflater = (LayoutInflater)Display.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 
     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return contacts.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 

      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      View vi=convertView; 
      if(convertView==null) 
      vi = mInflater.inflate(R.layout.rowlayout, null); 
      TextView tv= (TextView) vi.findViewById(R.id.textView1); 
      tv1= (TextView) vi.findViewById(R.id.textView2); 
      cb = (CheckBox) vi.findViewById(R.id.checkBox1); 
      tv.setText("Name :"+ contacts.get(position).getName()); 
      tv1.setText("Phone No :"+ contacts.get(position).getPhoneNumber()); 
      cb.setTag(position); 
      cb.setChecked(mCheckStates.get(position, false)); 
      cb.setOnCheckedChangeListener(this); 
      return vi; 
     } 
     public boolean isChecked(int position) { 
       return mCheckStates.get(position, false); 
      } 

      public void setChecked(int position, boolean isChecked) { 
       mCheckStates.put(position, isChecked); 
       notifyDataSetChanged(); 
      } 

      public void toggle(int position) { 
       setChecked(position, !isChecked(position)); 
      } 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      // TODO Auto-generated method stub 
      mCheckStates.put((Integer) buttonView.getTag(), isChecked);  

     } 

    } 

} 

listview.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@+id/lv" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/button1"/> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="Button" /> 

</RelativeLayout> 

rowlayout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="15dp" 
     android:layout_marginTop="34dp" 
     android:text="TextView" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/checkBox1" 
     android:layout_alignLeft="@+id/textView1" 
     android:text="TextView" /> 

    <CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/textView1" 
     android:layout_marginRight="33dp" 
     android:text="@string/choice" /> 

</RelativeLayout> 

在列表視圖中的每一行看起來像下面。您可以點擊複選框來選擇和取消選擇。稍後,您可以獲取所選項目並執行所需的任何操作。

選中複選框後,點擊底部的按鈕。

相關問題