Hide/Show firebase用户uid与firebase数据库匹配时cardview弹出菜单

Hide/Show the popup menu in cardview when firebase user uid is matched with the firebase database

我正在尝试创建一个小型社交网络应用程序,我正在使用 firebase 进行身份验证、数据库、存储等。我有一个 cardview xml,它显示了用户上传到的 post火力基地。我在卡片视图中实现了一个弹出菜单。此弹出视图包含一个删除菜单,如果单击该菜单将删除 post。此时我的应用程序的任何用户都可以删除任何 post(也来自其他用户)。除了上传 post.

的用户外,我希望此删除菜单的可见性对用户隐藏

我的车景 xml (Instarow.xml):-

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginBottom="10dp"
>

<android.support.constraint.ConstraintLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp">

    <LinearLayout
        android:id="@+id/linearlayouta"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent">

    <TextView
        android:id="@+id/textUsername"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="username"
        android:layout_weight="1"/>

        <TextView
            android:id="@+id/textViewOptions"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:text="&#8942;"
            android:textAppearance="?android:textAppearanceLarge" />
    </LinearLayout>

    <ImageView
        android:id="@+id/post_image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        app:layout_constraintBottom_toTopOf="@+id/textTitle"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearlayouta" />

    <TextView
        android:id="@+id/textTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        android:text="Post Title"
        app:layout_constraintBottom_toTopOf="@+id/textDescription"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/post_image" />

    <TextView
        android:id="@+id/textDescription"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Post Description"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textTitle" />


</android.support.constraint.ConstraintLayout>
</android.support.v7.widget.CardView>

我的menu_cardview.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.ansari.gnddcsocial.FeedsActivity">

<item
    android:id="@+id/action_settings_c"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never" />

<item
    android:id="@+id/card_del"
    app:showAsAction="always"
    android:title="Delete"
    />
</menu>

我的供稿 activity (FeedsActivty.java)

public class FeedsActivity extends AppCompatActivity {

private RecyclerView mInstaList;
private DatabaseReference mDatabase;
private FirebaseDatabase mFirebaseDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_feeds);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    mInstaList = (RecyclerView) findViewById(R.id.insta_list);
    mInstaList.setHasFixedSize(true);
    mInstaList.setLayoutManager(new LinearLayoutManager(this));
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mDatabase = mFirebaseDatabase.getReference().child("InstaApp");

}
@Override
protected void onStart() {
    super.onStart();
    Query query = mDatabase;

    FirebaseRecyclerOptions<Insta> options =
            new FirebaseRecyclerOptions.Builder<Insta>()
                    .setQuery(query, Insta.class)
                    .build();
    FirebaseRecyclerAdapter FBRA = new FirebaseRecyclerAdapter<Insta, InstaViewHolder>(options) {

        @Override
        public InstaViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.insta_row, parent, false);

            return new InstaViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(final InstaViewHolder viewHolder, int position, Insta model) {
            final String post_key = getRef(position).getKey().toString();

            viewHolder.setTitle(model.getTitle());
            viewHolder.setDesc(model.getDesc());
            viewHolder.setImage(getApplicationContext(),model.getImage());
            viewHolder.setUserName(model.getUsername());

            viewHolder.buttonViewOption.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    PopupMenu popup = new PopupMenu(view.getContext(), viewHolder.buttonViewOption);
                    //inflating menu from xml resource
                    popup.inflate(R.menu.menu_cardview);
                    MenuItem register = popup.getMenu().findItem(R.id.card_del);

                    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            switch (item.getItemId()) {
                                case R.id.action_settings_c:
                                    mDatabase.child(post_key).removeValue();
                                    //handle menu1 click
                                    break;
                                case R.id.card_del:
                                    //handle menu2 click
                                    break;
                            }
                            return false;
                        }
                    });
                    //displaying the popup
                    popup.show();

                }
            });

            viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent singleInstaActivity = new Intent(FeedsActivity.this, SingleinstaActivity.class);
                    singleInstaActivity.putExtra("PostId", post_key);
                    startActivity(singleInstaActivity);

                }
            });
        }

    };
    mInstaList.setAdapter(FBRA);
    FBRA.startListening();
 }

@Override
    public boolean onCreateOptionsMenu (Menu menu){
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    public static class InstaViewHolder extends RecyclerView.ViewHolder {

        View mView;
        public TextView buttonViewOption;

        public  InstaViewHolder(View itemView){
            super(itemView);
            mView= itemView;
            buttonViewOption = (TextView) itemView.findViewById(R.id.textViewOptions);
        }
        public void setTitle(String title){
            TextView post_title = (TextView) mView.findViewById(R.id.textTitle);
            post_title.setText(title);
        }
        public void setDesc(String desc){
            TextView post_desc = (TextView) mView.findViewById(R.id.textDescription);
            post_desc.setText(desc);
        }
        public void setImage(Context ctx, String image){
            ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
            Picasso.with(ctx).load(image).into(post_image);
        }
        public void setUserName(String userName){
            TextView postUserName = (TextView) mView.findViewById(R.id.textUsername);
            postUserName.setText(userName);
        }
    }
    @Override
    public boolean onOptionsItemSelected (MenuItem item){
        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }
        if (id == R.id.addIcon) {
            Intent intent = new Intent(FeedsActivity.this, PostActivity.class);
            startActivity(intent);
        }
        return super.onOptionsItemSelected(item);
    }

 }

这是我的数据库树:-

将保存当前用户的字符串添加到您的变量中:

   private String current_user;

现在在这一行下:

   mAuth = FirebaseAuth.getInstance();

添加这个

  current_user=mAuth.getCurrentUser().getUid();

现在转到 onBindViewholdermethod() 并添加此代码:

  if(current_user.equals(model.getUid())){ 

   //this means that this post was uploaded by the current user
   //show delete

  }else{

  //this means that this post was not uploaded by the current user
  //hide delete

  }

这一行下:

MenuItem register = popup.getMenu().findItem(R.id.card_del);