如何以编程方式在列表视图中选择项目

时间:2016-03-03 07:10:34

标签: android arrays list selection

我有一个ArrayList<String> List,其中包含listview all_list中的一些项目。如何通过检查ArrayList<String> List内容?

以编程方式在列表视图all_list中选择这些项目

例如,listview all_list包含[0] apple                                     [1]橙色                                      [2]香蕉

ArrayList<String> List中,我有橙色,所以我希望listview all_list上第1位的项目自动被选中(突出显示)。

我尝试过使用all_list.setItemChecked(),但它什么也没做,关闭了应用程序。我在列出适配器后执行操作。

2 个答案:

答案 0 :(得分:0)

将onItemClickListener设置为listview,以便在单击时设置一个布尔标志,将每行中的复选框设置为选中状态。然后调用notifyDataSetChanged()

答案 1 :(得分:0)

试试这个

<强> MainActivity.java

package com.example.multiseekbar;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;


public class MainActivity extends Activity {

    ListView listView1;

    ArrayList<ModelClass> modelClass = new ArrayList<ModelClass>();
    FruitSelectAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        modelClass.add(new ModelClass("Orange", true));
        modelClass.add(new ModelClass("Apple", false));
        modelClass.add(new ModelClass("Banana", false));
        modelClass.add(new ModelClass("Grapes", false));

        listView1 = (ListView) findViewById(R.id.listView1);
        adapter = new FruitSelectAdapter(MainActivity.this, modelClass);
        listView1.setAdapter(adapter);

        listView1.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                if(modelClass.get(arg2).isSelected()){
                    modelClass.get(arg2).setSelected(false);
                }else{
                    modelClass.get(arg2).setSelected(true);
                }

                adapter.notifyDataSetChanged();
            }
        });


    }

}

<强> activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.multiseekbar.MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
         >
    </ListView>

</RelativeLayout>

<强> FruitSelectAdapter.java

package com.example.multiseekbar;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;

public class FruitSelectAdapter extends BaseAdapter
{

    private Activity activity;
    private LayoutInflater inflater;

    private ArrayList<ModelClass> modelClass=null;

    public FruitSelectAdapter(Activity activity, ArrayList<ModelClass> modelClass) {
        this.activity = activity;
        this.modelClass = modelClass;
    }


    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return modelClass.size();
    }
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return modelClass.get(position);
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final ViewHolder holder;    
        if (inflater == null)
            inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {
            holder =new ViewHolder();
            convertView = inflater.inflate(R.layout.row1, null);            
            holder.txtFruitName = (TextView)convertView.findViewById(R.id.txtFruitName);
            holder.cbFruitSelectStatus = (CheckBox)convertView.findViewById(R.id.cbFruitSelectStatus);
            holder.linLayBackground = (LinearLayout) convertView.findViewById(R.id.linLayBackground);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder)convertView.getTag();
        }

        holder.txtFruitName.setText(modelClass.get(position).getFruitName());
        holder.cbFruitSelectStatus.setChecked(modelClass.get(position).isSelected());

        if(modelClass.get(position).isSelected()){
            holder.linLayBackground.setBackgroundColor(Color.parseColor("#80ccff"));
        }else{
            holder.linLayBackground.setBackgroundColor(Color.parseColor("#FFFFFF"));
        }

        return convertView;
    }

    class ViewHolder{       
        TextView txtFruitName;
        CheckBox cbFruitSelectStatus;
        LinearLayout linLayBackground;
    }

}

<强> row1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:id="@+id/linLayBackground"
    android:layout_height="70dp"
    android:orientation="horizontal"
     >

    <TextView 
        android:id="@+id/txtFruitName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Fruit name"
        android:layout_weight="1"
        android:textSize="16sp"
        android:textColor="#000000" />


    <CheckBox 
        android:id="@+id/cbFruitSelectStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" />

</LinearLayout>

<强> ModelClass.java

package com.example.multiseekbar;

public class ModelClass {

    String fruitName;
    boolean isSelected=false;

    public ModelClass(String fruitName, boolean isSelected) {
        this.fruitName = fruitName;
        this.isSelected = isSelected;
    }

    public String getFruitName() {
        return fruitName;
    }

    public void setFruitName(String fruitName) {
        this.fruitName = fruitName;
    }

    public boolean isSelected() {
        return isSelected;
    }

    public void setSelected(boolean isSelected) {
        this.isSelected = isSelected;
    }


}