2012-02-06 14 views
1

アンドロイドのリストビューでチェックしたアイテムを削除しようとしていますが、これはなぜですか?私のコードは以下の通りです。レスポンスをお願いします。私はこのコードも試してみましたが、それはもっと分かりません。 How to delete check box items from listアンドロイドのリストビューでチェックした項目がありません

など多くの削除リスト項目フォームリストビューに関連しています。

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; 
    } 

} 

このコードをエラーなしで更新してください。または、これを最善の考えをしてください。

答えて

0

リスト内を移動中にリストから項目を削除しています。少なくとも、カウンタ変数とリストサイズで削除された項目を考慮する必要があります(元のコードにはi--がありますが、コメントアウトしています)。

I.e.インデックス2のアイテムを削除した後、リストの次のアイテムは3でなく2になります。

i-のコメントを解除してください。

+0

チェック "「」に..私はこのi--のコメントを解除しようとしているが、それでも最初に私がチェックし、削除ボタンをクリックして、私が直面しているリスト –

0

チェック項目を削除しますが、リストのデータソースを変更しない場合は、チェックリストからデータソースをロードしてください。以下のように:

[OK]を
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

から任意の項目を削除できませんでした。この式の型は配列型でなければなりませんが、ArrayList()に解決されています。

+0

ここで、temp.remove(position);この行で、あなたはあなたがこれを宣言している位置を通過しました。このIDですか?私はイドを試しても、うまく仕事に気づいた。 –

+0

実際、そのid、私は、私はコードをコンパイルしていないので、まだエラーがあるかもしれません。 – jeet