从RecyclerView和Realm数据库中删除项目

马蒂亚斯·纳戈雷

图像

我有一个EditText将项目添加到此RecyclerView以及Realm数据库中的项目。这很好用。问题是我不知道如何RecyclerViewRealm数据库数据库中删除这些项目这应该在 Fragment 上还是在适配器上完成?如何?谢谢!

顶部有一张图片,显示了该应用程序的屏幕截图。

这是它的Fragment位置RecyclerView

    public class FragmentMyList extends Fragment{

    private RecyclerView recyclerView;
    private EditText editTxt;
    private FloatingActionButton btn;
    private Item item;
    private ArrayList<Item> itemList;
    private AdapterItemsRecycler adapterItemsRecycler;
    private Realm realm;
    RealmResults<Item> results;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View vistaADevolver = inflater.inflate(R.layout.fragment_my_list, container, false);
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        Realm.init(getContext());
        realm = Realm.getDefaultInstance();

        editTxt = (EditText)vistaADevolver.findViewById(R.id.editText);
        btn = (FloatingActionButton) vistaADevolver.findViewById(R.id.button);
        recyclerView = (RecyclerView) vistaADevolver.findViewById(R.id.recyclerViewToDo);

        itemList = new ArrayList<>();
        results = realm.where(Item.class).equalTo("id", 1).findAll();
        final InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);

        adapterItemsRecycler = new AdapterItemsRecycler(results, getActivity(), new ItemsListener());
        recyclerView.setHasFixedSize(true);
        recyclerView.addItemDecoration(new SimpleItemDivider(getActivity()));
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL, false));
        recyclerView.setAdapter(adapterItemsRecycler);


        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String itemName = editTxt.getText().toString();
                saveIntoDatabase(itemName);

                inputManager.hideSoftInputFromWindow(getView().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                editTxt.getText().clear();
                adapterItemsRecycler.notifyDataSetChanged();
            }
        });
        return vistaADevolver;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        realm.close();
    }

    private void saveIntoDatabase(final String itemName) {

        realm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm bgRealm) {
                item = bgRealm.createObject(Item.class);
                item.setName(itemName);
                item.setPoint(itemName);
                item.setId(1);
                Fragment fragment = new Fragment();
                Bundle bundle = new Bundle();
                bundle.putString("POINT", item.getPoint());
                fragment.setArguments(bundle);
                itemList.add(item);

            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                // Transaction was a success.
                Log.v("database", "Stored ok");
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                // Transaction failed and was automatically canceled.
                Log.e("database", error.getMessage());
            }
        });

    }
    class ItemsListener implements AdapterView.OnClickListener{

        @Override
        public void onClick(View view) {

            Item itemTouched = results.get(recyclerView.getChildAdapterPosition(view));
            EscuchadorInterface unEscuchador = (EscuchadorInterface)getActivity();
            unEscuchador.itemSelected(itemTouched);

        }
    }
    public interface EscuchadorInterface{
        public void itemSelected(Item anItem);
    }
}

我的RecyclerView适配器:

    public class AdapterItemsRecycler extends RecyclerView.Adapter {

    private RealmResults<Item> itemList;
    private Context context;
    private View.OnClickListener listener;
    private Realm realm;


    public AdapterItemsRecycler(RealmResults<Item> itemList, Context context, View.OnClickListener listener) {
        this.itemList = itemList;
        this.context = context;
        this.listener = listener;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.my_list_detail, parent, false);
        view.setOnClickListener(listener);

        ItemViewHolder itemViewHolder = new ItemViewHolder(view);

        return itemViewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        Item item = itemList.get(position);
        ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
        itemViewHolder.loadItem(item);

    }

    @Override
    public int getItemCount() {
        return itemList.size();
    }

    private class ItemViewHolder extends RecyclerView.ViewHolder{

        private TextView itemText;
        private ImageButton imageButton;

        public ItemViewHolder(View view) {
            super(view);
            itemText = (TextView) view.findViewById(R.id.textViewItemNameTD);
            imageButton = (ImageButton) view.findViewById(R.id.delete);
        }

        public void loadItem(Item item) {

            itemText.setText(item.getName());
            imageButton.setImageResource(R.drawable.trash);

        }

        public ImageButton getImageButton() {
            return imageButton;
        }
    }
}

RecyclerView 的详细信息:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:design="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    tools:context="com.segunfamisa.sample.bottomnav.MainActivity">

    <ImageButton
        android:id="@+id/delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:tint="#03A9F4"
        android:scaleType="centerInside"
        android:background="#ffffff"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:onClick="deleteItem"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textViewItemNameTD"
        android:textSize="14dp"
        android:textColor="#212121"
        android:background="#ffffff"
        android:padding="10dp"
        android:layout_toRightOf="@+id/delete"/>

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/arrow"
        android:scaleType="centerInside"
        android:background="#ffffff"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"/>

</RelativeLayout>
史诗熊猫力量

只要使用RealmRecyclerViewAdapterRealmResults直接,它会自动的数据库和表和适配器之间的同步处理。

public class FragmentMyList
        extends Fragment {
    private RecyclerView recyclerView;
    private EditText editTxt;
    private FloatingActionButton btn;

    private AdapterItemsRecycler adapterItemsRecycler;

    private Realm realm;

    RealmResults<Item> results;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View vistaADevolver = inflater.inflate(R.layout.fragment_my_list, container, false);
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        Realm.init(getContext());
        realm = Realm.getDefaultInstance();

        editTxt = (EditText) vistaADevolver.findViewById(R.id.editText);
        btn = (FloatingActionButton) vistaADevolver.findViewById(R.id.button);
        recyclerView = (RecyclerView) vistaADevolver.findViewById(R.id.recyclerViewToDo);

        results = realm.where(Item.class).equalTo("id", 1).findAll();
        final InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);

        adapterItemsRecycler = new AdapterItemsRecycler(results, new ItemsListener());
        recyclerView.setHasFixedSize(true);
        recyclerView.addItemDecoration(new SimpleItemDivider(getActivity()));
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
        recyclerView.setAdapter(adapterItemsRecycler);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String itemName = editTxt.getText().toString();
                saveIntoDatabase(itemName);

                inputManager.hideSoftInputFromWindow(getView().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                editTxt.getText().clear();
            }
        });
        return vistaADevolver;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        realm.close();
    }

    private void saveIntoDatabase(final String itemName) {
        realm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm bgRealm) {
                Item item = bgRealm.createObject(Item.class);
                item.setName(itemName);
                item.setPoint(itemName);
                item.setId(1);
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                // Transaction was a success.
                Log.v("database", "Stored ok");
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                // Transaction failed and was automatically canceled.
                Log.e("database", error.getMessage());
            }
        });

    }

    class ItemsListener
            implements AdapterView.OnClickListener {
        @Override
        public void onClick(View view) {
            Item itemTouched = results.get(recyclerView.getChildAdapterPosition(view));
            EscuchadorInterface unEscuchador = (EscuchadorInterface) getActivity();
            unEscuchador.itemSelected(itemTouched);
        }
    }

    public interface EscuchadorInterface {
        public void itemSelected(Item anItem);
    }
}

// compile 'io.realm:android-adapters:2.0.0'
public class AdapterItemsRecycler
        extends RealmRecyclerViewAdapter<Item, ItemViewHolder> {
    private View.OnClickListener listener;

    public AdapterItemsRecycler(OrderedRealmCollection<Item> itemList, View.OnClickListener listener) {
        super(itemList, true);
        this.listener = listener;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.my_list_detail, parent, false);
        view.setOnClickListener(listener);
        ItemViewHolder itemViewHolder = new ItemViewHolder(view);
        return itemViewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        Item item = getData().get(position);
        ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
        itemViewHolder.loadItem(item);
    }

    private static class ItemViewHolder
            extends RecyclerView.ViewHolder {
        private TextView itemText;
        private ImageButton imageButton;

        public ItemViewHolder(View view) {
            super(view);
            itemText = (TextView) view.findViewById(R.id.textViewItemNameTD);
            imageButton = (ImageButton) view.findViewById(R.id.delete);
        }

        public void loadItem(Item item) {
            itemText.setText(item.getName());
            imageButton.setImageResource(R.drawable.trash);
        }

        public ImageButton getImageButton() {
            return imageButton;
        }
    }
}

private void deleteFromDatabase(final String itemName) {
    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm bgRealm) {
            Item item = bgRealm.where(Item.class).equalTo("name", itemName).findFirst();
            if(item != null) {
                item.deleteFromRealm();
            }
        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            // Transaction was a success.
            Log.v("database", "Delete ok");
        }
    }, new Realm.Transaction.OnError() {
        @Override
        public void onError(Throwable error) {
            // Transaction failed and was automatically canceled.
            Log.e("database", error.getMessage());
        }
    });

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQLite数据库中的项目未在RecyclerView中删除

来自分类Dev

我如何从数据库中删除recyclerView中的项目

来自分类Dev

SQLite数据库中的项目未在RecyclerView中删除

来自分类Dev

从Realm和RecyclerView中删除项目

来自分类Dev

使用Javascript和PHP从数据库中删除项目

来自分类Dev

异步删除和更新数据库中的项目

来自分类Dev

如何从 ListView 和 SQLite 数据库中删除项目?

来自分类Dev

如何从数据库中删除项目

来自分类Dev

如何从数据库中删除项目?

来自分类Dev

如何从 recyclerView 和 sqlite 数据库中删除 cardview?(科特林 - 安卓)

来自分类Dev

在使用 php 和 javascript 从数据库中删除项目之前插入确认

来自分类Dev

无法从Meteorjs中的Mongo数据库中删除项目

来自分类Dev

从数据库中删除项目 - Android Studio 中的 ListView

来自分类Dev

我无法使用房间数据库和协同程序在recyclerview中删除项目

来自分类Dev

没有从SQlite数据库中删除项目

来自分类Dev

从数据库PHP SQL中删除项目

来自分类Dev

从列表视图和数据库中删除项目

来自分类Dev

Android:从列表视图以及数据库中删除项目

来自分类Dev

如何删除SQL数据库中的项目?

来自分类Dev

无法在Django视图中从数据库中删除项目

来自分类Dev

滑动从数据库中删除项目-Sqflite

来自分类Dev

从数据库中删除项目后刷新jtable

来自分类Dev

没有从SQlite数据库中删除项目

来自分类Dev

使用休眠从数据库中删除项目

来自分类Dev

使用 mongodb 从数据库中删除单个项目

来自分类Dev

使用 OnItemClickListener 从 ListView 和数据库中删除项目

来自分类Dev

显示和删除数据库中的数据

来自分类Dev

关于 Realm 数据库中的事务

来自分类Dev

删除 firebase 实时数据库中的数据时,如何从列表中删除特定项目?

Related 相关文章

  1. 1

    SQLite数据库中的项目未在RecyclerView中删除

  2. 2

    我如何从数据库中删除recyclerView中的项目

  3. 3

    SQLite数据库中的项目未在RecyclerView中删除

  4. 4

    从Realm和RecyclerView中删除项目

  5. 5

    使用Javascript和PHP从数据库中删除项目

  6. 6

    异步删除和更新数据库中的项目

  7. 7

    如何从 ListView 和 SQLite 数据库中删除项目?

  8. 8

    如何从数据库中删除项目

  9. 9

    如何从数据库中删除项目?

  10. 10

    如何从 recyclerView 和 sqlite 数据库中删除 cardview?(科特林 - 安卓)

  11. 11

    在使用 php 和 javascript 从数据库中删除项目之前插入确认

  12. 12

    无法从Meteorjs中的Mongo数据库中删除项目

  13. 13

    从数据库中删除项目 - Android Studio 中的 ListView

  14. 14

    我无法使用房间数据库和协同程序在recyclerview中删除项目

  15. 15

    没有从SQlite数据库中删除项目

  16. 16

    从数据库PHP SQL中删除项目

  17. 17

    从列表视图和数据库中删除项目

  18. 18

    Android:从列表视图以及数据库中删除项目

  19. 19

    如何删除SQL数据库中的项目?

  20. 20

    无法在Django视图中从数据库中删除项目

  21. 21

    滑动从数据库中删除项目-Sqflite

  22. 22

    从数据库中删除项目后刷新jtable

  23. 23

    没有从SQlite数据库中删除项目

  24. 24

    使用休眠从数据库中删除项目

  25. 25

    使用 mongodb 从数据库中删除单个项目

  26. 26

    使用 OnItemClickListener 从 ListView 和数据库中删除项目

  27. 27

    显示和删除数据库中的数据

  28. 28

    关于 Realm 数据库中的事务

  29. 29

    删除 firebase 实时数据库中的数据时,如何从列表中删除特定项目?

热门标签

归档