列表视图中已安装应用程序的复选框问题 [英] checkbox issue in installed app in listview

查看:118
本文介绍了列表视图中已安装应用程序的复选框问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我指向这些链接链接链接链接链接



但我的问题没有得到解决。我知道这个问题有很多问题,但我的问题是



我有4
A,B,C,D类



从A类转到B类,其中listview中列出了所有已安装的应用程序。在B类中我发送Packagelist到类c(BaseAdapter类),然后哪个应用程序用户选择将传递到A类。



所以我的问题是在哪里或如何使用POJO类将安装的应用程序传递给baseadapter类,然后如何获得所有检查的值(字符串应用程序名称),并将其传递给类A.
,以及我如何维护复选框的检查状态。 p>

任何帮助plz。



自定义适配器类

  import java.util.List; 

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;

public class AppListAdapter extends BaseAdapter {

List< PackageInfo> packageList;
活动上下文;
PackageManager packageManager;
boolean [] itemChecked;
int checkBoxCounter = 0;
int checkBoxInitialized = 0;

public AppListAdapter(Activity context,List< PackageInfo> packageList,
PackageManager packageManager){
super();
this.context = context;
this.packageList = packageList;
this.packageManager = packageManager;
itemChecked = new boolean [packageList.size()];
}

私人类ViewHolder {
TextView apkName;
CheckBox ck1;
}

public int getCount(){
return packageList.size();
}

public Object getItem(int position){
return packageList.get(position);
}

public long getItemId(int position){
return 0;
}

@Override
public View getView(final int position,View convertView,ViewGroup parent){
// final ViewHolder holder;
checkBoxCounter = 0;
checkBoxInitialized = 0;

LayoutInflater inflater = context.getLayoutInflater();

if(convertView == null){
convertView = inflater.inflate(R.layout.apklist_item,null);
final ViewHolder holder = new ViewHolder();

holder.apkName =(TextView)convertView
.findViewById(R.id.ApkList_tvappname);
holder.ck1 =(CheckBox)convertView
.findViewById(R.id.ApkList_checkBox);

holder.ck1
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked){

AppsSelected element =(AppsSelected)holder.ck1
.getTag();
element.setSelected(buttonView.isChecked());

if(checkBoxCounter <= checkBoxInitialized){
//递增计数器,当我们滚动列表它
//执行onCheckedChanged每次所以
//使用这个东西我们可以维护状态
checkBoxCounter ++;
} else {
element =(AppsSelected)holder.ck1.getTag();
element.setSelected(buttonView.isChecked());

if(element.isSelected())
Toast.makeText(
context,
You selected+ element.getName(),
Toast .LENGTH_LONG).show();
else
Toast.makeText(
context,
未选择+ element.getName(),
Toast.LENGTH_LONG).show
}

}
});

convertView.setTag(holder);
holder.ck1.setTag(packageList.get(position));

} else {
((ViewHolder)convertView.getTag())ck1.setTag(packageList.get(position));
}
ViewHolder holder =(ViewHolder)convertView.getTag();
PackageInfo packageInfo =(PackageInfo)getItem(position);

可绘制的appIcon = packageManager
.getApplicationIcon(packageInfo.applicationInfo);
String appName = packageManager.getApplicationLabel(
packageInfo.applicationInfo).toString();
appIcon.setBounds(0,0,40,40);
holder.apkName.setCompoundDrawables(appIcon,null,null,null);
holder.apkName.setCompoundDrawablePadding(15);
holder.apkName.setText(appName);


return convertView;

}

}


解决方案

你可以参考我的答案在这里,你可以做的是,存储复选框状态在布尔数组,那么你不会面对这个问题.....



Android复选框多选问题


I refered to these links link , link , link , link

but my problem is not getting solved. i know there are many question regarding this issue but my problem is

i have 4 class A,B,C,D

From class A i goto Class B where all installed apps listed in listview. in Class B i send Packagelist to Class c (BaseAdapter class) and then which apps user have selected will pass to Class A.

So my problem is where or how can i use POJO class to pass installed Apps to baseadapter class and then how i can get all checked value(string app name) and pass it to the Class A. and also how i can maintain checked status of check box.

any help plz.

custom Adapter class

import java.util.List;

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;

public class AppListAdapter extends BaseAdapter {

    List<PackageInfo> packageList;
    Activity context;
    PackageManager packageManager;
    boolean[] itemChecked;
    int checkBoxCounter = 0;
    int checkBoxInitialized = 0;

    public AppListAdapter(Activity context, List<PackageInfo> packageList,
            PackageManager packageManager) {
        super();
        this.context = context;
        this.packageList = packageList;
        this.packageManager = packageManager;
        itemChecked = new boolean[packageList.size()];
    }

    private class ViewHolder {
        TextView apkName;
        CheckBox ck1;
    }

    public int getCount() {
        return packageList.size();
    }

    public Object getItem(int position) {
        return packageList.get(position);
    }

    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    //  final ViewHolder holder;
        checkBoxCounter = 0;
        checkBoxInitialized = 0;

        LayoutInflater inflater = context.getLayoutInflater();

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.apklist_item, null);
            final ViewHolder holder = new ViewHolder();

            holder.apkName = (TextView) convertView
                    .findViewById(R.id.ApkList_tvappname);
            holder.ck1 = (CheckBox) convertView
                    .findViewById(R.id.ApkList_checkBox);

            holder.ck1
                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {

                            AppsSelected element = (AppsSelected) holder.ck1
                                    .getTag();
                            element.setSelected(buttonView.isChecked());

                            if (checkBoxCounter <= checkBoxInitialized) {
                                // increment counter, when we scroll the List it
                                // execute onCheckedChanged everytime so by
                                // using this stuff we can maintain the state
                                checkBoxCounter++;
                            } else {
                                element = (AppsSelected) holder.ck1.getTag();
                                element.setSelected(buttonView.isChecked());

                                if (element.isSelected())
                                    Toast.makeText(
                                            context,
                                            "You selected " + element.getName(),
                                            Toast.LENGTH_LONG).show();
                                else
                                    Toast.makeText(
                                            context,
                                            "Not selected " + element.getName(),
                                            Toast.LENGTH_LONG).show();
                            }

                        }
                    });

            convertView.setTag(holder);
            holder.ck1.setTag(packageList.get(position));

        } else {
        ((ViewHolder) convertView.getTag()).ck1.setTag(packageList.get(position));
        }
        ViewHolder holder = (ViewHolder) convertView.getTag();
        PackageInfo packageInfo = (PackageInfo) getItem(position);

        Drawable appIcon = packageManager
                .getApplicationIcon(packageInfo.applicationInfo);
        String appName = packageManager.getApplicationLabel(
                packageInfo.applicationInfo).toString();
        appIcon.setBounds(0, 0, 40, 40);
        holder.apkName.setCompoundDrawables(appIcon, null, null, null);
        holder.apkName.setCompoundDrawablePadding(15);
        holder.apkName.setText(appName);


        return convertView;

    }

}

解决方案

You can refer to my answer here, what you can do is,store check box state in a boolean array then you wont face this issue.....

Android checkbox multiselected issue

这篇关于列表视图中已安装应用程序的复选框问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆