我试图从sqlite的填充我的ListView数据在onclicklistener我的Load按钮。
I was trying to populate my listview with data from sqlite in onclicklistener of my load button.
不过,我是我见过的例子有点困惑。这里是我的code中的 TotalResults.java
However, I'm a little confused from the examples I have seen. here is my code in 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);
}
}
});
下面是我的数据库code。
Here is my database code.
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();
}
}
我在这个方法得到一个错误:
I get an error in this method:
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不能被解析为一个类型
and i get an error saying : cannot instantiate the type ListAdapter, ListAdapter cannot be resolved to a type.
请帮忙。提前致谢。 :)
please help. Thanks in advance. :)
推荐答案
使用一个CustomAdapter
Use a 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
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
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>
在列表视图中的每一行看起来像下面。您可以单击复选框以选择和取消选择。稍后,您可以选择的项目,并采取一切必要。
Each row in listview will look like below. You can click the check box to select and unselect. Later you can get the selected item and do whatever is required.
选中复选框后单击底部的按钮。
Click the button at the bottom after checking the checkbox.
相关推荐
最新文章