1

Android のデータベースから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();
        }

    }

}

そして、ここに例のリンクがあります

4

3 に答える 3

2

のために作成CustomAdapterListViewます。layout_rowの行を表すcreateで、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 Layout2 Views-を含むTextView (id = text), RadioButton (id = radioButtonChooser)

于 2012-12-25T11:34:42.310 に答える
1

Android Api Demosを見てください。おそらく最善の方法は、List11.javaの例を使用することです。行項目がCheckableを実装している場合、 はListViewそれ自体でチェック位置を処理して保持します。で処理する必要はありませんAdapter

于 2012-12-25T11:27:41.907 に答える
0

カスタム アダプターを使用する必要があり、すべてのインフレートされたレイアウトのコントロールに getView メソッドでアクセスできます。

チェックボックスを含むカスタム アダプタを使用したリストビュー

http://www.ezzylearning.com/tutorial.aspx?tid=1763429

于 2012-12-25T11:25:57.800 に答える