-1

私はアプリケーションのバックアップアプリに取り組んでおり、チェックボックスで選択したアプリのみをバックアップするようにしたいと考えています。リストにチェックボックスを実装しましたが、前後に9行ごとに行をチェックすると、チェックされます:S

PS。また、アプリのバックアップも機能するように、誰かが唯一の方法で私を助けることができれば幸いです:)

(これは完全な Java ファイルのほんの一部です)

private static class AppViewHolder {
    TextView top_view;
    TextView bottom_view;
    ImageView icon;
    CheckBox check_mark;
    //@SuppressWarnings("unused")
}

private class TableView extends ArrayAdapter<ApplicationInfo> {

    private TableView() {
        super(main.this, R.layout.tablerow_02, mAppList);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        AppViewHolder holder;
        ApplicationInfo info = mAppList.get(position);

        if(convertView == null) {
            LayoutInflater inflater = getLayoutInflater();
            convertView = inflater.inflate(R.layout.tablerow_02, parent, false);

            holder = new AppViewHolder();
            holder.top_view = (TextView)convertView.findViewById(R.id.top_view);
            holder.bottom_view = (TextView)convertView.findViewById(R.id.bottom_view);

            holder.check_mark = (CheckBox)convertView.findViewById(R.id.checkBox1);


            holder.icon = (ImageView)convertView.findViewById(R.id.row_image);
            holder.icon.setMaxHeight(40);
            convertView.setTag(holder);

        } else {
            holder = (AppViewHolder) convertView.getTag();
        }

        holder.check_mark.setOnCheckedChangeListener(new OnCheckedChangeListener(){
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if ( isChecked )
                {
                    Toast.makeText(getApplicationContext(), "#" + position + " is checked", Toast.LENGTH_LONG).show();
                }
                else{
                    Toast.makeText(getApplicationContext(), "#" + position + " is unchecked", Toast.LENGTH_LONG).show();
                }

            }
        });

        holder.top_view.setText(info.loadLabel(getPackageManager()));
        holder.bottom_view.setText(info.packageName);

        //this should not throw the exception
        try {
            holder.icon.setImageDrawable(mPackMag.getApplicationIcon(info.packageName));
        } catch (NameNotFoundException e) {
            holder.icon.setImageResource(R.drawable.ic_launcher);
        }

        return convertView;
    }

}
4

1 に答える 1

3

ビューを適切にリサイクルしていないためです。リスト内の項目ごとに 1 つずつ、ブール値の配列を保持する必要があります。次に、そのブール値のリストの値に基づいてgetView呼び出す必要があります。setCheckedholder.check_mark

于 2012-06-19T21:02:10.697 に答える