How to select item in the list view programmatically

我们两清 提交于 2019-12-31 05:24:11

问题


I have an ArrayList<String> List which contains some items from the listview all_list. How can I select these items in the list view all_list programmatically by checking the ArrayList<String> List contents?

for e.g., listview all_list contains [0] apple [1] orange [2] banana

In ArrayList<String> List, I have orange so I want item on position 1 on the listview all_list to be selected (highlighted) automatically.

I have tried using all_list.setItemChecked(), but it does nothing and shuts down the application. I am performing the operation after listing the adapter.


回答1:


set an onItemClickListener to the listview such that on click, you set a boolean flag that sets the checkbox in each row to selected. then call notifyDataSetChanged()




回答2:


Try this

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


}


来源:https://stackoverflow.com/questions/35765399/how-to-select-item-in-the-list-view-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!