Get Selected Item Using Checkbox in Listview

前端 未结 9 814
醉酒成梦
醉酒成梦 2020-11-22 09:36

I am creating an Android application where I have a ListView that displays all of the applications that were installed in my mobile phone.

My ListView is customized,

9条回答
  •  醉梦人生
    2020-11-22 10:15

    Assuming you want to get items of row whose check boxes are checked at the click of a button. Assumption based on your title "Get Selected Item Using Checkbox in Listview when I click a Button".

    Try the below. Make only changes as below. Keep the rest the same.

    Explanation and discussion on the topic @

    https://groups.google.com/forum/?fromgroups#!topic/android-developers/No0LrgJ6q2M

    MainActivity.java

    public class MainActivity extends Activity {
         AppInfoAdapter adapter ;
         AppInfo app_info[] ;
            @Override
            protected void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
    
    
                final ListView listApplication = (ListView)findViewById(R.id.listApplication);
                Button b= (Button) findViewById(R.id.button1);
                b.setOnClickListener(new OnClickListener()
                {
    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
    
                        StringBuilder result = new StringBuilder();
                        for(int i=0;i pInfo = new ArrayList();
                pInfo.addAll(pm.getInstalledPackages(0));
                app_info = new AppInfo[pInfo.size()];
    
                int counter = 0;
                for(PackageInfo item: pInfo){
                    try{
    
                        applicationInfo = pm.getApplicationInfo(item.packageName, 1);
    
                        app_info[counter] = new AppInfo(pm.getApplicationIcon(applicationInfo), 
                                String.valueOf(pm.getApplicationLabel(applicationInfo)));
    
                        System.out.println(counter);
    
                    }
                    catch(Exception e){
                         System.out.println(e.getMessage());
                    }
    
                    counter++;
                }
    
               adapter = new AppInfoAdapter(this, R.layout.listview_item_row, app_info);
                listApplication.setAdapter(adapter);
    
            }
    }
    

    activity_main.xml ListView with button at the buton

    
    
        
    
        

    AppInfoAdapter

    public class AppInfoAdapter extends ArrayAdapter implements CompoundButton.OnCheckedChangeListener
    {  SparseBooleanArray mCheckStates; 
    
        Context context;
        int layoutResourceId;
        AppInfo  data[] = null;
    
        public AppInfoAdapter(Context context, int layoutResourceId, AppInfo[] data){
            super(context, layoutResourceId,data);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.data = data;
            mCheckStates = new SparseBooleanArray(data.length);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent){
    
            View row = convertView;
            AppInfoHolder holder= null;
    
            if (row == null){
    
                LayoutInflater inflater = ((Activity)context).getLayoutInflater();
                row = inflater.inflate(layoutResourceId, parent, false);
    
                holder = new AppInfoHolder();
    
                holder.imgIcon = (ImageView) row.findViewById(R.id.imageView1);
                holder.txtTitle = (TextView) row.findViewById(R.id.textView1);
                holder.chkSelect = (CheckBox) row.findViewById(R.id.checkBox1);
    
                row.setTag(holder);
    
            }
            else{
                holder = (AppInfoHolder)row.getTag();
            }
    
    
            AppInfo appinfo = data[position];
            holder.txtTitle.setText(appinfo.applicationName);
            holder.imgIcon.setImageDrawable(appinfo.icon);
           // holder.chkSelect.setChecked(true);
            holder.chkSelect.setTag(position);
            holder.chkSelect.setChecked(mCheckStates.get(position, false));
            holder.chkSelect.setOnCheckedChangeListener(this);
            return row;
    
        }
        public boolean isChecked(int position) {
            return mCheckStates.get(position, false);
        }
    
        public void setChecked(int position, boolean isChecked) {
            mCheckStates.put(position, isChecked);
    
        }
    
        public void toggle(int position) {
            setChecked(position, !isChecked(position));
    
        }
    @Override
    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
    
         mCheckStates.put((Integer) buttonView.getTag(), isChecked);    
    
    }
    static class AppInfoHolder
    {
        ImageView imgIcon;
        TextView txtTitle;
        CheckBox chkSelect;
    
    }
    }
    

    Here's the snap shot

    enter image description here

提交回复
热议问题