简体   繁体   English

如何从ListView和sharedpreferences Android Studio中删除项目?

[英]How to remove item from ListView and sharedpreferences android studio?

i want to be able to do this to the code i have already I am new to programing please help. 我想对已有的代码执行此操作,我是编程新手,请帮助。 - Add an icon the user can click (per item) to remove it - When clicked that item on the list should be removed -The item should be removed from storage as well (so it doesn't appear next time they load up the app) here is my code: -添加一个图标,用户可以单击(每个项目)将其删除-单击时,列表中的该项目也应删除-该项目也应从存储中删除(因此下次加载应用程序时不会出现)这是我的代码:

MainActivity.java 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 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 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 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 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" />

Step1: Create activity_main.xml 步骤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>

Step2: Create to todo_item.xml 步骤2:建立todo_item.xml

<?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>

Step3: Define Object Todo 第三步:定义对象待办事项

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

Step4: Create TodoItemAdapter class 步骤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;
    }
}

Step5: Process on the MainActivity class 步骤5:在MainActivity类上进行处理

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

It is working fine. 一切正常。 Thanks. 谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM