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="⋮"
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);
我正在尝试创建一个小型社交网络应用程序,我正在使用 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="⋮"
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);