Android Studio从ListView和Firebase中删除项目 [英] Android studio remove items from both listview and firebase

查看:45
本文介绍了Android Studio从ListView和Firebase中删除项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从android studio中的listview和firebase中删除项目.当我从Firebase控制台中删除项目时,它会自动从列表视图中删除项目.但是我想首先从列表视图中删除项目,并希望此更改反映在数据库中.

I'm trying to remove items from both listview and firebase in android studio. When I remove items from the firebase console, it automatically removes items from listview. However I want to remove items from the listview first, and want this changes to be reflected on the database.

public class PreferActivity extends AppCompatActivity {
    //Firebase Var
    private DatabaseReference mDatabase;

//Android Layout
private Button btnAdd;
private EditText etText;
private ListView listView;

//Array list
private ArrayList<String> arrayList = new ArrayList<>();
private ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_prefer);
    mDatabase= FirebaseDatabase.getInstance().getReference();

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,arrayList);

    btnAdd = (Button) findViewById(R.id.btnAdd);
    etText = (EditText) findViewById(R.id.etDatabase);
    listView = (ListView) findViewById(R.id.database_list_view);

    listView.setAdapter(adapter);

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mDatabase.push().setValue(etText.getText().toString());
        }
    });


    mDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String string = dataSnapshot.getValue(String.class);

            arrayList.add(string);

            adapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            String string = dataSnapshot.getValue(String.class);

            arrayList.remove(string);

            adapter.notifyDataSetChanged();
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });



}
}

任何评论都会对我有所帮助.预先感谢

Any comments would help me. Thanks in advance

推荐答案

现在此解决方案可能是硬编码的,但这是因为您仅将Strings存储在数据库中,同时还需要它们的键来告诉firebase删除哪个字符串..我的建议是再创建一个 ArrayList 来存储键,并在Item Click上访问它.

Now this solution might be hard coded, but that's because you're only storing Strings on the database while you also need their keys to tell firebase which one to delete. My recommendation is having a second ArrayList to store the keys and access it on Item Click.

因此,首先您声明此 ArrayList ,我们将其命名为 keysList :

So first you declare this ArrayList, let's name it keysList:

private ArrayList<String> arrayList = new ArrayList<>();
private ArrayList<String> keysList = new ArrayList<>();

然后,您必须更改您的 onChildAdded 方法,以将这些键存储在 ArrayList 中:

then you must change your onChildAdded method to store those keys in the ArrayList:

        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String string = dataSnapshot.getValue(String.class);

            arrayList.add(string);
            keysList.add(dataSnapshot.getKey());

            adapter.notifyDataSetChanged();
        }

但是您还必须更改您的 onChildRemoved ,以从 keysList 中删除已删除的密钥:

But then you'd also have to change your onChildRemoved to remove the deleted keys from the keysList:

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            String string = dataSnapshot.getValue(String.class);

            arrayList.remove(string);
            keysList.remove(dataSnapshot.getKey());

            adapter.notifyDataSetChanged();
        }

最后,将 onItemClickListener 添加到您的 listView 中,以便用户可以单击以从Firebase中删除该项目:

And finally, add an onItemClickListener to your listView so that the user can click to remove the item from Firebase:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                String key = keysList.get(position);
                mDatabase.child(key).removeValue();
            }
        });

这篇关于Android Studio从ListView和Firebase中删除项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆