4

これらのリンクを参照しましたlinklinklinklink

しかし、私の問題は解決されていません。この問題に関して多くの質問があることは知っていますが、私の問題は

私は4つのクラスA、B、C、Dを持っています

クラスAから、インストールされているすべてのアプリがリストビューにリストされているクラスBに移動します。クラス B では、Packagelist をクラス c (BaseAdapter クラス) に送信し、ユーザーが選択したアプリをクラス A に渡します。

だから私の問題は、どこで、またはどのようにPOJOクラスを使用して、インストールされたアプリをbaseadapterクラスに渡し、次にチェックされたすべての値(文字列のアプリ名)を取得してクラスAに渡すかです。また、チェックされたステータスを維持する方法チェックボックス。

助けてください。

カスタム アダプタ クラス

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;

    }

}
4

1 に答える 1

4

ここで私の答えを参照できます。できることは、チェックボックスの状態をブール配列に保存すると、この問題に直面することはありません.....

Android チェックボックスの複数選択の問題

于 2013-09-14T08:37:08.187 に答える