2016-07-29 13 views
0

私は既にこれをコードに行うことができるようにしたいと思います。私はプログラミングの初心者です。 - ユーザーがアイテムをクリックして削除できるアイコンを追加する - リストのアイテムをクリックすると削除する必要があります - アイテムは次回からは表示されないように、ストレージからも削除する必要があります )アプリまでここに私のコードです:ListViewとsharedpreferences android studioからアイテムを削除するには?

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() 
    ); 




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 dialog, int which) { 
        ToDoItem item = new ToDoItem(
          input.getText().toString(), 
          false 
        ); 
        listManager.addItem(item); 


       } 
      }); 

    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 getDescription(); 
} 
} 

Activity_Main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<EditText 
    android:id="@+id/txtItem" 
    android:layout_width="240dp" 
    android:layout_height="wrap_content" 
    android:inputType="text" 
    android:hint="@string/hintTxtItem" 
    /> 

<Button 
    android:id="@+id/btnAdd" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/lblBtnAdd" 
    android:layout_toRightOf="@id/txtItem" 
    /> 

<TextView 
    android:id="@android:id/empty" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/txtItem" 
    android:text="@string/txtEmpty" 
    android:gravity="center_horizontal" 
    /> 

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/txtItem" 
    android:choiceMode="multipleChoice" > 
</ListView> 

<Button 
    android:id="@+id/btnDel" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:text="@string/lblBtnDel" /> 

to_do_item_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:weightSum="1"> 

<CheckBox 
    android:id="@+id/CheckBox" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<TextView 
    android:id="@+id/item" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="20sp"/> 

<ListView 
    android:layout_weight="20" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<Button 
    android:id="@+id/btnDel" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:text="@string/lblBtnDel" /> 

答えて

0

ステップ1:activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <EditText 
      android:id="@+id/txtItem" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:inputType="text" /> 

     <Button 
      android:id="@+id/btnAdd" 
      android:layout_width="80dp" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@id/txtItem" 
      android:text="Add" /> 
    </LinearLayout> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <ListView 
      android:id="@+id/lvTodo" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:choiceMode="multipleChoice" /> 

     <TextView 
      android:id="@android:id/empty" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:gravity="center_horizontal" 
      android:text="No data" 
      android:visibility="invisible" /> 
    </RelativeLayout> 

    <Button 
     android:id="@+id/btnDel" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Delete" /> 
</LinearLayout> 

ステップ2を作成します。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:padding="10dp" 
    android:orientation="horizontal" 
    android:weightSum="1"> 

    <TextView 
     android:id="@+id/tvTodoName" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:text="Learn Android" 
     android:textSize="20sp" /> 

    <CheckBox 
     android:id="@+id/cbChooseTodo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

ステップ3をtodo_item.xmlするには、Create:オブジェクト藤堂

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 void setDescription(String description) { 
     this.description = description; 
    } 

    public boolean isComplete() { 
     return isComplete; 
    } 

    public void setComplete(boolean complete) { 
     isComplete = complete; 
    } 
} 

ステップ4の定義:TodoItemAdapterを作成します。クラス

public class TodoItemAdapter extends ArrayAdapter<ToDoItem> { 
    private ArrayList<ToDoItem> arrayListTodo; 
    private LayoutInflater layoutInflater; 

    public TodoItemAdapter(Context context, int resource, ArrayList<ToDoItem> objects) { 
     super(context, resource, objects); 

     this.arrayListTodo = objects; 
     this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null){ 
      holder = new ViewHolder(); 
      convertView = layoutInflater.inflate(R.layout.todo_item, parent,false); 

      holder.tvTodoName = (TextView)convertView.findViewById(R.id.tvTodoName); 
      holder.cbTodoChoose = (CheckBox)convertView.findViewById(R.id.cbChooseTodo); 

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

     final ToDoItem toDoItem = arrayListTodo.get(position); 
     holder.tvTodoName.setText(toDoItem.getDescription()); 
     holder.cbTodoChoose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       toDoItem.setComplete(isChecked); 
      } 
     }); 

     holder.cbTodoChoose.setChecked(toDoItem.isComplete()); 

     return convertView; 
    } 

    public static class ViewHolder{ 
     public TextView tvTodoName; 
     public CheckBox cbTodoChoose; 
    } 
} 

ステップ5:それは正常に動作している

public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 
    private ListView lvTodoItem; 
    private ArrayList<ToDoItem> toDoItems; 
    private TodoItemAdapter todoItemAdapter; 
    private Button btnDel; 
    private Button btnAdd; 

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

     initData(); 
    } 

    private void initData(){ 
     toDoItems = new ArrayList<>(); 
     todoItemAdapter = new TodoItemAdapter(MainActivity.this, R.layout.todo_item, toDoItems); 

     lvTodoItem = (ListView)findViewById(R.id.lvTodo); 
     lvTodoItem.setAdapter(todoItemAdapter); 

     btnAdd = (Button)findViewById(R.id.btnAdd); 
     btnDel = (Button)findViewById(R.id.btnDel); 
     btnAdd.setOnClickListener(this); 
     btnDel.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()){ 
      case R.id.btnAdd: 
       addTodoItem(); 
       break; 
      case R.id.btnDel: 
       deleteTodoItem(); 
       break; 
     } 
    } 

    private void addTodoItem() { 

    } 

    private void deleteTodoItem() { 
     for (int i= toDoItems.size()-1; i>=0 ; i--){ 
      ToDoItem toDoItem = toDoItems.get(i); 
      if (toDoItem.isComplete()){ 
       toDoItems.remove(i); 
      } 
     } 
     todoItemAdapter.notifyDataSetChanged(); 
    } 
} 

MainActivityクラスのプロセス。ありがとう。

+0

本当にありがとうございますが、オリジナルのコーディングのほとんどを変更することなく私を見せてくれることを願っていました。私はこれを初めて使っていますので、自分のコードを使用するかどうかを理解しやすくなります。削除ボタンを動作させる方法を教えてください。 (私のコードを使って買います)ありがとうございます:) –

+0

2つの問題に集中できます:1.リストの項目を削除します。 2. adapter.notifyDataSetChanged()メソッドでアダプターを更新します。 – sonnv1368

+0

私のコードで削除ボタンがどこにあるのか教えてください。 –

関連する問題