gpt4 book ai didi

带复选框的 Android ListView

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:20 25 4
gpt4 key购买 nike

我找到了一个关于从 android 中的数据库填充 listView 的示例,它运行良好,但我想向该应用程序添加一些功能,我想放置一个 复选框 在我的 listview 中的每个项目旁边,当用户检查每个项目时,他将能够通过按确认按钮删除该项目。我已经把这些行制作成 已启用多项选择,但复选框没有出现,我不知道如何删除所选项目!

ListView lstView = getListView();

lstView.setChoiceMode(2);




public void onListItemClick(
ListView parent, View v, int position, long id)
{
//---toggle the check displayed next to the item---
parent.setItemChecked(position, parent.isItemChecked(position));

}

你能帮我解决我的问题吗?

这是我的代码:

package com.saigmn;

import java.util.ArrayList;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class DataListView extends ListActivity {

private ArrayList<String> results = new ArrayList<String>();
private String tableName = DBHelper.tableName;
private SQLiteDatabase newDB;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
openAndQueryDatabase();

displayResultList();


}
private void displayResultList() {
TextView tView = new TextView(this);
tView.setText("This data is retrieved from the database and only 4 " +
"of the results are displayed");
getListView().addHeaderView(tView);

setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, results));
getListView().setTextFilterEnabled(true);


////----------------------
ListView lstView = getListView();
//lstView.setChoiceMode(0); //CHOICE_MODE_NONE
//lstView.setChoiceMode(1); //CHOICE_MODE_SINGLE
lstView.setChoiceMode(2);

// setListAdapter(new ArrayAdapter<String>(this,
// android.R.layout.activity_list_item));
}

//--------------------------------

public void onListItemClick(
ListView parent, View v, int position, long id)
{
//---toggle the check displayed next to the item---
parent.setItemChecked(position, parent.isItemChecked(position));

}


private void openAndQueryDatabase() {
try {
DBHelper dbHelper = new DBHelper(this.getApplicationContext());
newDB = dbHelper.getWritableDatabase();
Cursor c = newDB.rawQuery("SELECT FirstName, Age FROM " +
tableName +
" where Age > 10 LIMIT 4", null);

if (c != null ) {
if (c.moveToFirst()) {
do {
String firstName = c.getString(c.getColumnIndex("FirstName"));
int age = c.getInt(c.getColumnIndex("Age"));
results.add("Name: " + firstName + ",Age: " + age);
}while (c.moveToNext());
}
}
} catch (SQLiteException se ) {
Log.e(getClass().getSimpleName(), "Could not create or Open the database");
} finally {
if (newDB != null)
newDB.execSQL("DELETE FROM " + tableName);
newDB.close();
}

}

}

这里是 Link Of Example

最佳答案

ListView创建CustomAdapter;创建 layout_row,代表 ListView 中的行,并具有结构 - [text] [radio_button]

public class CustomAdapter extends BaseAdapter {
private LayoutInflater inflater;
private Activity activity;
private ArrayList<String> listItems;
private RadioButton listRadioButton = null;

// NOTE: not the best practice to use static fields
public static int selectedIndex;

public CustomerListAdapter(Activity activity) {
this.activity = activity;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

listItems = new ArrayList<String>();
}

public void addItem(final String item) {
listItems.add(item);
notifyDataSetChanged();
}

@Override
public View getView(final int position, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.text = (TextView)convertView.findViewById(R.id.text);
holder.radioButtonChooser = (RadioButton)convertView.findViewById(R.id.radioButtonChooser);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}

holder.text.setText((listItems.get(position)).getText());

holder.radioButtonChooser.setChecked(false);

holder.radioButtonChooser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// uncheck previous checked button.
if (listRadioButton != null)
listRadioButton.setChecked(false);

// assign to the variable the new one
listRadioButton = (RadioButton) v;

// find if the new one is checked or not, and save "selectedIndex"
if (listRadioButton.isChecked()) {
selectedIndex = position;

// pass this index in your delete function
// get item from your list by this index
// and delete row from list
} else {
// nothing is selected
listRadioButton = null;
selectedIndex = -1;
}
}
});

return convertView;
}

@Override
public int getCount() {
return listItems.size();
}

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

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

/**
* Represents list row structure
*/
public class ViewHolder{
public TextView text;
public RadioButton radioButtonChooser;
}

...

private void fillList(){
CustomAdapter adapter = new CustomAdapter(activity);

ArrayList<String> items = new ArrayList<String>();
// fill "items" array with your list data

for (String item : items) {
adapter.addItem(item);
}

listView.setAdapter(adapter);
}

...

list_row Layout 包含 2 个 View - TextView (id = text), RadioButton (id = radioButtonChooser)

关于带复选框的 Android ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com