2016-08-09 3 views
1

多かれ少なかれ同じトピックを持つスレッドがたくさんあることを知っていますが、それらのどれも私の状況をカバーしていません。リストビューの1つのアイテムを削除するには、削除ボタンを配線する方法はありますか?

リストビューの1行を削除するには削除ボタンを取得しようとしています。私はこの部分を働かせましたが、私はそれを私の主な活動で働かせることはできません。コードは、私は私のコードでこの部分を入れるたびに壊し続ける:

ImageButton removeButton = (ImageButton) findViewById(R.id.btnDel); 
removeButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     onRemoveButtonClick(); 
    } 
    private void onRemoveButtonClick() { 
     ToDoItem item = (ToDoItem) v.getTag(); 
     notifyDataSetChanged(); 
} 

MainActivityは、このコードのビットなしで正常に動作します。私はそれがコードであるかどうか、または誰かが大いに感謝してくれたら教えてください、私がそれを私のMainActivityに入れているかどうかわかりません。

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private static final String LOG_TAG = "ToDoApp"; 
    private ToDoListManager listManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ListView todoList = (ListView) findViewById(R.id.todo_list); 
     listManager = new ToDoListManager(getApplicationContext()); 
     ToDoItemAdapter adapter = new ToDoItemAdapter(this, listManager.getList()); 


     todoList.setAdapter(adapter); 
     ImageButton addButton = (ImageButton) findViewById(R.id.add_item); 
     addButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onAddButtonClick(); 
      } 
     }); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     listManager.saveList(); 
    } 

    private void onAddButtonClick() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle(R.string.add_item); 

     final EditText input = new EditText(this); 
     input.setInputType(InputType.TYPE_CLASS_TEXT); 
     builder.setView(input); 

     builder.setPositiveButton(
      R.string.ok, 
      new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        //Add item to list 
        ToDoItem item = new ToDoItem(
          input.getText().toString(), 
          false 
        ); 
        listManager.addItem(item); 
        Log.i(LOG_TAG, input.getText().toString()); 
       } 
      }); 
     builder.setNegativeButton(
      R.string.cancel, 
      new DialogInterface.OnClickListener(){ 
       @Override 
       public void onClick(DialogInterface dialog, int Which) { 
        dialog.cancel(); 
       } 
      }); 

     builder.show(); 
    } 

    private class ToDoItemAdapter extends ArrayAdapter<ToDoItem> { 

     private Context context; 
     private List<ToDoItem> items; 
     public ToDoItemAdapter(Context context, List<ToDoItem> items){ 
      super(context,-1, items); 

      this.context = context; 
      this.items = items; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      if(convertView == null) { 
       LayoutInflater inflater = (LayoutInflater) context. 
        getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = inflater.inflate(R.layout.to_do_item_layout, parent, false); 
      } 

      TextView textView = (TextView) convertView.findViewById(R.id.item); 
      CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.checkBox); 

      textView.setText(items.get(position).getDescription()); 
      checkBox.setChecked(items.get(position).isComplete()); 

      convertView.setTag(items.get(position)); 
      convertView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        ToDoItem item = (ToDoItem) v.getTag(); 
        item.toggleComplete(); 
        notifyDataSetChanged(); 
       } 
      }); 
      return convertView; 
     } 
    } 
} 

ToDoListManager.java

public class ToDoListManager { 


private static final String APP_PREFERENCES = "todoapp"; 
private static final String TODO_ITEMS = "itemslist"; 

private List<ToDoItem> items; 
private SharedPreferences savedData; 

public ToDoListManager(Context context) { 

    savedData = context.getSharedPreferences (
     APP_PREFERENCES, 
     Context.MODE_PRIVATE 
    ); 

    String json = savedData.getString(TODO_ITEMS, null); 
    if (json == null) { 
    items = new ArrayList<>(); 
    } else { 

Type type = new TypeToken<List<ToDoItem>>() {}.getType(); 
items = new Gson().fromJson(json, type); 
} 


} 
public List<ToDoItem> getList() { 
return items; 
} 
public void addItem(ToDoItem item) { 
    items.add(item); 
    saveList(); 

} 
public void saveList() { 
    SharedPreferences.Editor edit =savedData.edit(); 
    edit.clear(); 
    String json = new Gson().toJson(items); 

    edit.putString(TODO_ITEMS, json); 
    edit.apply(); 
} 

} 

ToDoItem.java

public class ToDoItem { 
private String description; 
private boolean isComplete; 

public ToDoItem (String description,boolean isComplete) { 
    this.description = description; 
    this.isComplete = isComplete; 
} 

public String getDescription() { 
    return description; 
} 
public boolean isComplete() { 
    return isComplete; 
} 
public void toggleComplete() { 
    isComplete = !isComplete; 
} 
@Override 
public String toString() { 
    return description; 
} 
} 

enter image description here

+0

リストビューの各行にそのアイテムを削除する削除ボタンがあるようにするには、アダプタにclickListenerを追加する必要があります。あなたの 'ToDoItemAdapter'コードを私たちと共有できますか? –

+0

コード内のMainActivity.javaの中にそれがあります。 –

+0

Nitpick博士によると、アダプタの 'getView()'メソッドに各ボタンの 'OnClickListener'を設定する必要があります。彼はまた、参照変数の宣言ではなく、 'ToDoItemAdapter'クラスのコードを要求しています。 –

答えて

1

1)まず、あなたのto_do_item_layoutにボタンを追加

2)今、それにリスナーを追加し、各項目

Button btn = (Button) convertView.findViewById(R.id.my_btn); 

3)にボタンを追加するには、このコードを追加します

btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     items.remove(items.get(position));   
     } 
}); 
+0

私はconvertViewの復帰後、私の主な活動の最後にそれを置いてください。 ?あなたのTodoItemAdapterクラス内の –

+0

をgetViewメソッド – cafebabe1991

+0

に入れてokだから、あなたが言ったようにして、それを台無しにした後、ボタンを押したときにクラッシュしました。 –

関連する問題