Android的ListView控件通过复选框控件、复选框、Android、ListView

2023-09-08 00:25:23 作者:爱不曾保留

我发现一个样品大约从Android的数据库中填充的的ListView ,它工作得很好,但我想一些功能添加到这个应用程序,我想提出一个复选框旁边的每个项目在我的列表视图和用户检查时,每一个项目,他就可以通过$ P $删除该项目pssing一个确认button.I've把这些线使在选择题启用,但复选框不出现,我不知道如何删除所选的项目!

I've found a sample about populating a listView from a database in android,it works well,but I want to add some functionality to this application,I want to put a checkbox next to each item in my listview and when the user checks each item he will be able to delete that item by pressing a Confirm button.I've put these lines to make the multiple choice enabled,but the checkbox does not appear and I don't know how to delete the selected Item !

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));

                    }

请你帮我解决我的问题?

Would you please help me solve my issue?

下面是我的code:

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();
        }

    }

}

这里是链接的例子

推荐答案

创建 CustomAdapter 的ListView ;创建 layout_row ,从而重新presents行中的的ListView ,并具有结构 - [文] [radio_button]

Create CustomAdapter for ListView; create layout_row, which represents row in your ListView, and has structure - [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布局包含2 浏览 - 的TextView(ID =文本),单选按钮( ID = radioButtonChooser)

list_row Layout contains 2 Views - TextView (id = text), RadioButton (id = radioButtonChooser)