从我的ListView获取并使用选中的项目

时间:2011-12-19 15:08:39

标签: java android listview checkbox

我正在使用ListView。我想获取所选元素并存储它们以便以后使用它们。

这可能是基本的,但作为一个初学者,我真的不知道如何处理它..

这是我的List的样子,以及与之相关的Java代码:

http://i.stack.imgur.com/MgKq9.jpg

public class PizzaActivity extends DashboardActivity {
    /** Called when the activity is first created. */
    // HashMap arraList taking objects
    private ArrayList <HashMap<String, Object>> myIng;
    private static final String INGREDIENT = "ingnom";
    private static final String PRIX = "ingprix";
    private static final String IMAGE = "iconfromraw";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_f2);
        ListView listView = (ListView)findViewById(R.id.list);

        myIng = new ArrayList<HashMap<String,Object>>();
        HashMap<String, Object> hm;

        // Créée une nouvelle HashMap et définis ses élements
        hm = new HashMap<String, Object>();
        hm.put(IMAGE, R.drawable.mozza);
        hm.put(INGREDIENT, "Mozzarella");
        hm.put(PRIX, "Prix : 0.60€");
        // Ajoute la HashMap créée à la liste
        myIng.add(hm);

        hm = new HashMap<String, Object>();
        hm.put(IMAGE, R.drawable.emmental);
        hm.put(INGREDIENT, "Emmental");
        hm.put(PRIX, "Prix : 0.50€");

        myIng.add(hm);

        hm = new HashMap<String, Object>();
        hm.put(INGREDIENT, "Chèvre");
        hm.put(PRIX, "Prix : 0.75€");
        hm.put(IMAGE, R.drawable.chevre);

        myIng.add(hm);

        hm = new HashMap<String, Object>();
        hm.put(INGREDIENT, "Roquefort");
        hm.put(PRIX, "Prix : 0.75€");
        hm.put(IMAGE, R.drawable.roquefort);

        myIng.add(hm);

       // Définis un SimpleAdapter et lie les valeurs aux lignes de la vue view R.layout.listview
       SimpleAdapter adapter = new SimpleAdapter(this, myIng, R.layout.listview,
                new String[]{IMAGE,INGREDIENT,PRIX}, new int[]{R.id.img,R.id.text1, R.id.text2});

        listView.setAdapter(adapter);

        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    } 

}

任何建议都会很酷:)

谢谢!

1 个答案:

答案 0 :(得分:0)

检查example。你应该能够轻松完成。

检查此布局

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

        <ImageView android:id="@+id/friendsImage"
            android:layout_width="50dp" android:layout_height="50dp"
            android:layout_margin="10dp" android:src="@drawable/network" android:layout_alignParentLeft="true"/>

        <TextView android:id="@+id/textTitle" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:gravity="center_vertical"
            android:textColor="@color/white" android:text="Friend # 1"
            android:textSize="30px" android:textStyle="bold" android:layout_toRightOf="@id/friendsImage"
            android:layout_marginTop="20dp" />
        <CheckBox android:id="@+id/check" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:layout_marginLeft="4px"
            android:layout_marginRight="10px" android:layout_alignParentRight="true"></CheckBox>
    </RelativeLayout>
</LinearLayout>

你的适配器的getView应该是这样的

public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.friends_list_item, null);

            holder = new ViewHolder();

            holder.textTitle = (TextView) convertView
                    .findViewById(R.id.textTitle);
            holder.messageListTitle = (ImageView) convertView
                    .findViewById(R.id.friendsImage);
            holder.checkbox = (CheckBox) convertView.findViewById(R.id.check);
            holder.checkbox
                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            Log.d(TAG, "Oncheck clicked");
                            Friend element = (Friend) holder.checkbox
                                    .getTag();
                            element.isSelected = buttonView.isChecked();
                        }
                    });
            holder.checkbox.setTag(mData.get(position));
            convertView.setTag(holder);
        } else
            holder = (ViewHolder) convertView.getTag();
            ((ViewHolder) convertView.getTag()).checkbox.setTag(mData.get(position));

        try {
            Friend curObj = mData.get(position);
            holder.textTitle.setText(curObj.fname);
            holder.checkbox.setChecked(mData.get(position).isSelected);
            //Add image
            convertView.setTag(R.id.tagFriendList, curObj);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return convertView;
    }