【问题标题】:Delete The Data From Fire base by Clicking the Item in List View also From Firebase通过单击列表视图中的项目也从 Firebase 中删除 Fire base 中的数据
【发布时间】:2018-08-26 07:35:42
【问题描述】:

我正在开发一个 android 应用程序,必须通过单击列表项从 Firebase 中删除数据。 从列表中的Firebase 检索到的数据但是当我单击列表项删除数据时它显示白屏然后退出到活动。

我创建了一个Dialog Box,当我点击一个项目时应该会打开它。

这是我的Dialog Box

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="200dp"
    android:background="#3E80B4"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/txt_dia"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="10dp"
            android:text="Do you realy want to delete Medicine ?"
            android:textColor="@android:color/white"
            android:textSize="15dp"
            android:textStyle="bold"/>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="#3E80B4"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btn_yes"
                android:layout_width="100dp"
                android:layout_height="30dp"
                android:background="@android:color/white"
                android:clickable="true"
                android:text="Yes"
                android:textColor="#5DBCD2"
                android:textStyle="bold" />

            <Button
                android:id="@+id/btn_no"
                android:layout_width="100dp"
                android:layout_height="30dp"
                android:layout_marginLeft="5dp"
                android:background="@android:color/white"
                android:clickable="true"
                android:text="No"
                android:textColor="#5DBCD2"
                android:textStyle="bold" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

这是我的删除项目活动,当我点击项目时,它会打开Dialog Box

public class ExpiryItemActivity extends AppCompatActivity {
    ListView mylistView;
    DatabaseReference db;
    public Dialog MyDialog;
    TextView tvDeleteDiaog;
    public Button Yes, No;
    Integer value;
    List<ClassMedicine> medicineList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_expiry_item);
        mylistView= findViewById(R.id.mylistexpiry);
        Yes = findViewById(R.id.btn_yes);
        No = findViewById(R.id.btn_no);
        tvDeleteDiaog= findViewById(R.id.txt_dia);
        medicineList= new ArrayList<>();
        db= FirebaseDatabase.getInstance().getReference("medicines");
    }
    @Override
    protected void onStart() {
        super.onStart();
        db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                medicineList.clear();
                for (DataSnapshot medicineSnapshot:dataSnapshot.getChildren()){
                    ClassMedicine classMedicine=medicineSnapshot.getValue(ClassMedicine.class);
                    medicineList.add(classMedicine);
                }
                MedicineList adapter=new MedicineList(ExpiryItemActivity.this,medicineList);
                mylistView.setAdapter(adapter);
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });

        mylistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                value=mylistView.getId();
                Toast.makeText(ExpiryItemActivity.this, "Here" + value.toString(), Toast.LENGTH_SHORT).show();
                customDialog();
            }

            private void customDialog() {
                MyDialog = new Dialog(ExpiryItemActivity.this);
                MyDialog.setContentView(R.layout.xmldialog);
                MyDialog.setTitle("Delete Medicine?");
                Toast.makeText(ExpiryItemActivity.this, value.toString(), Toast.LENGTH_SHORT).show();
                final DatabaseReference child1 = db.child("medicine");
                Toast.makeText(ExpiryItemActivity.this, "Here me", Toast.LENGTH_SHORT).show();
                Yes.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        child1.child("mediDate").child(String.valueOf(value)).removeValue();
                        MyDialog.cancel();
                    }
                });
                No.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        MyDialog.cancel();
                    }
                });
                MyDialog.show();
            }

        });
    }
}

该类用于如何将List中的数据从Firebase中取出。

【问题讨论】:

  • 欢迎来到 SO。你问的问题太笼统了。看看How to Ask
  • 我已经实现了所有与删除相关的东西。我认为你甚至不理解代码和我的问题。
  • 我的问题是当我点击要删除的项目时它显示白屏而不是对话框
  • 这里发生了很多事情。你是说child1.child("mediDate").child(String.valueOf(value)).removeValue(); 不起作用吗?如果是这样,是否有错误消息?如果是这样,请分享。你能用尽可能少的代码重现它吗?我怀疑点击处理程序与这种情况下的问题有什么关系,但排除这种情况会很好。通过排除其他可能性,您正在创建一个minimal complete verifiable example,这是在 Stack Overflow 上获得代码相关问题帮助的最佳方式。

标签: android firebase listview firebase-realtime-database


【解决方案1】:

为了从列表中删除您的数据Dialog Box,您的布局文件将保持与您设计的相同。

和你的java文件从列表中删除列表项,以及从Firebase中删除。

public class ExpiryItemActivity extends AppCompatActivity {
    ListView mylistView;
    DatabaseReference db;
    public Dialog MyDialog;
    TextView tvDeleteDiaog;
    public Button Yes, No;
    String value;
    List<ClassMedicine> medicineList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_expiry_item);
        mylistView= findViewById(R.id.mylistexpiry);

        tvDeleteDiaog= findViewById(R.id.txt_dia);
        medicineList= new ArrayList<>();
        db= FirebaseDatabase.getInstance().getReference("medicines");
    }
    @Override
    protected void onStart() {
        super.onStart();
        db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                medicineList.clear();
                for (DataSnapshot medicineSnapshot:dataSnapshot.getChildren()){
                    ClassMedicine classMedicine=medicineSnapshot.getValue(ClassMedicine.class);
                    medicineList.add(classMedicine);
                }
                MedicineList adapter=new MedicineList(ExpiryItemActivity.this,medicineList);
                mylistView.setAdapter(adapter);
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });

        mylistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //value=ClassMedicine.getMedicineId();
                ClassMedicine c=medicineList.get(position);
                value=c.getMedicineId().toString();
                customDialog();
            }
            private void customDialog() {
                MyDialog = new Dialog(ExpiryItemActivity.this);
                MyDialog.setContentView(R.layout.xmldialog);
                MyDialog.setTitle("Delete Medicine?");
                final DatabaseReference child1 = db.child("medicine");
                Yes = MyDialog.findViewById(R.id.btn_yes);
                No = MyDialog.findViewById(R.id.btn_no);
                Yes.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                      String x=  value.toString();
                        db.child(String.valueOf(value)).removeValue();
                        MyDialog.cancel();
                    }
                });
                No.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        MyDialog.cancel();
                    }
                });
                MyDialog.show();
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2017-04-03
    • 1970-01-01
    相关资源
    最近更新 更多