Ничего не удалял отмеченный пункт в списке в андроиде - PullRequest
1 голос
/ 06 февраля 2012

Я пытаюсь удалить отмеченный элемент в просмотре списка в Android, но я не достиг этого, почему? мой код ниже. Пожалуйста, ответьте. Я пробовал этот код, который не получил больше идеи. Как удалить элементы-флажки из списка

и многие другие, связанные с удалением списка элементов формы списка.

public class BookmarksJokes extends Activity implements OnClickListener,
    OnItemClickListener {
ListView lv;
static ArrayList<Integer> checks=new ArrayList<Integer>();
static String[] tempTitle = new String[100];
static String[] tempBody = new String[100];
static String[] pos = new String[100];
private static class EfficientAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    public EfficientAdapter(Context context) {
        mInflater = LayoutInflater.from(context);

    }

    public int getCount() {
        return tempTitle.length;
    }

    public Object getItem(int position) {
        return position;
    }

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

    public View getView(final int position, View convertView, ViewGroup parent) {
         ViewHolder holder;

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.bookmarks_list_item,
                    null);
            holder = new ViewHolder();

            holder.text1 = (TextView) convertView
                    .findViewById(R.id.titleJok);
            holder.text2 = (TextView) convertView
                    .findViewById(R.id.bodyJok);
            holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

           holder.checkBox.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                if(((CheckBox)v).isChecked()){
                  checks.set(position, 1);
                }
                else{
                 checks.set(position, 0);
                }

            }
        });
        holder.text1.setText(tempTitle[position]);
        holder.text2.setText(tempBody[position]);

        return convertView;
    }
     class ViewHolder {
        TextView text1;
        TextView text2;
        CheckBox checkBox;


    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.bokmarksjoks);

    try {
        db = (new DatabaseHelper(this)).getWritableDatabase();
    } catch (IOException e) {
        e.printStackTrace();
    }
    setUpViews();

    for(int b=0;b<tempTitle.length;b++){
        checks.add(b,0);              //Assign 0 by default in each position of ArrayList
            } 
    String one = pref.getString("title", "");
    String two = pref.getString("body", "");

    tempTitle = one.split(",");
    tempBody = two.split(",");

    lv.setAdapter(new EfficientAdapter(this));

    lv.setItemsCanFocus(false);
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    lv.setOnItemClickListener(this);
}

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.delete:
        AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
        alt_bld.setMessage("Are you Sure want to delete all checked jok ?")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {

                                for(int i=0;i<checks.size();i++){
                                    if(checks.get(i)==1){
                                        Log.d(TAG, "i  Value >>"+i);
                                            checks.remove(i);
                                            // i--;
                                            Log.d(TAG, "checked Value >>"+checks);
                                            Log.d(TAG, "i  Value -- >>"+i);
                                         }
                                     }
                                    ((EfficientAdapter)lv.getAdapter()).notifyDataSetChanged();
                                  }
                            })
                .setNegativeButton("No",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = alt_bld.create();
        alert.setTitle("Delete Jokes");
        alert.show();
    case R.id.checkbox:

    default:
        break;
    }

}

пожалуйста, обновите этот код без ошибок. Или подайте лучшую идею для этого.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2012

Вы хотите удалить отмеченный элемент, но не изменяете источник данных списка, пожалуйста, загрузите источник данных из проверочного списка. как ниже:

public class BookmarksJokes extends Activity implements OnClickListener,
    OnItemClickListener {
ListView lv;
static ArrayList<Integer> checks=new ArrayList<Integer>();
static ArrayList<String> tempTitle = new String[100];
static ArrayList<String> tempBody = new String[100];
static String[] pos = new String[100];
private static class EfficientAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    public EfficientAdapter(Context context) {
        mInflater = LayoutInflater.from(context);

    }

    public int getCount() {
        return tempTitle.length;
    }

    public Object getItem(int position) {
        return position;
    }

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

    public View getView(final int position, View convertView, ViewGroup parent) {
         ViewHolder holder;

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.bookmarks_list_item,
                    null);
            holder = new ViewHolder();

            holder.text1 = (TextView) convertView
                    .findViewById(R.id.titleJok);
            holder.text2 = (TextView) convertView
                    .findViewById(R.id.bodyJok);
            holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

           holder.checkBox.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                if(((CheckBox)v).isChecked()){
                  checks.set(position, 1);
                }
                else{
                 checks.set(position, 0);
                }

            }
        });
        holder.text1.setText(tempTitle.get(position));
        holder.text2.setText(tempBody.get(position));

        return convertView;
    }
     class ViewHolder {
        TextView text1;
        TextView text2;
        CheckBox checkBox;


    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.bokmarksjoks);

    try {
        db = (new DatabaseHelper(this)).getWritableDatabase();
    } catch (IOException e) {
        e.printStackTrace();
    }
    setUpViews();

    for(int b=0;b<tempTitle.size();b++){
        checks.add(b,0);              //Assign 0 by default in each position of ArrayList
            } 
    String one = pref.getString("title", "");
    String two = pref.getString("body", "");

    String[] tokens = one.split(",");
    tempTitle=Arrays.asList(tokens);
    tokens= two.split(",");
    tempBody =Arrays.asList(tokens);

    lv.setAdapter(new EfficientAdapter(this));

    lv.setItemsCanFocus(false);
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    lv.setOnItemClickListener(this);
}

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.delete:
        AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
        alt_bld.setMessage("Are you Sure want to delete all checked jok ?")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {

                                for(int i=0;i<checks.size();i++){
                                    if(checks.get(i)==1){
                                        Log.d(TAG, "i  Value >>"+i);
                                            checks.remove(i);
                                            tempTitle.remove(i);
                                            tempBody.remove(i);
                                            // i--;
                                            Log.d(TAG, "checked Value >>"+checks);
                                            Log.d(TAG, "i  Value -- >>"+i);
                                         }
                                     }
                                    ((EfficientAdapter)lv.getAdapter()).notifyDataSetChanged();
                                  }
                            })
                .setNegativeButton("No",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = alt_bld.create();
        alert.setTitle("Delete Jokes");
        alert.show();
    case R.id.checkbox:

    default:
        break;
    }

}
0 голосов
/ 06 февраля 2012

Вы удаляете элементы из списка, просматривая его. По крайней мере, вы должны обязательно учитывать удаленный элемент в переменной counter и размер списка (именно поэтому в исходном коде есть i--, но вы его закомментировали).

т.е. после того, как вы удалили элемент с индексом 2, следующий в списке все еще 2, а не 3.

Не комментируйте i--, это должно исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...