问题
I'm developing an android application using Java and Firebase. I want to to edit and update the data stored inside Firebase Database. For this I'm using a dialog where i can retrieve the data and update it.
Here is my coding.
Adapter class.
public class AdminAdapter extends RecyclerView.Adapter<AdminAdapter.AdminHolder> {
UpdateInterface updateInterface;
String noteId="",noteDate="";
private Context mContext;
private List<Upload> mUploads;
public AdminAdapter(Context context,List<Upload> uploads){
mContext = context;
mUploads = uploads;
updateInterface = (UpdateInterface)mContext;
}
@NonNull
@Override
public AdminHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.admin_card_view,parent,false);
return new AdminAdapter.AdminHolder(v);
}
@Override
public void onBindViewHolder(@NonNull AdminHolder holder, final int position) {
final Upload uploadCurrent = mUploads.get(position);
holder.admTitle.setText(uploadCurrent.getTitle());
holder.admDesc.setText(uploadCurrent.getDescription());
holder.admDate.setText(uploadCurrent.getDate());
holder.admTime.setText(uploadCurrent.getTime());
holder.admSentDate.setText(uploadCurrent.getSentDate());
Picasso.get()
.load(uploadCurrent.getImage())
.fit()
.centerInside()
.into(holder.admImage);
holder.admEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Upload upload = mUploads.get(position);
showDialog(upload);
}
});
holder.admDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Upload upload = mUploads.get(position);
confirmDeleteDialog(upload);
}
});
}
@Override
public int getItemCount() {
return mUploads.size();
}
public class AdminHolder extends RecyclerView.ViewHolder{
public TextView admTitle,admDesc,admDate,admTime,admSentDate;
public ImageView admImage;
public ImageView admEdit,admDelete;
public AdminHolder(@NonNull View itemView) {
super(itemView);
admTitle = itemView.findViewById(R.id.admTitle);
admDesc = itemView.findViewById(R.id.admDesc);
admDate = itemView.findViewById(R.id.admDate);
admTime = itemView.findViewById(R.id.admTime);
admSentDate = itemView.findViewById(R.id.admSentTime);
admImage = itemView.findViewById(R.id.admImage);
admEdit = itemView.findViewById(R.id.admEditBtn);
admDelete = itemView.findViewById(R.id.admDeleteBtn);
}
}
public void showDialog(Upload uploadOb){
String imageUrl = null;
final Dialog dialog = new Dialog((mContext));
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_edit);
dialog.show();
Window window = dialog.getWindow();
window.setLayout(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT );
final EditText editTitle = dialog.findViewById(R.id.admEditTitle);
final EditText editDesc = dialog.findViewById(R.id.admEditDescription);
final EditText editDate = dialog.findViewById(R.id.admEditDate);
final EditText editTime = dialog.findViewById(R.id.admEditTime);
final ImageView editImage = dialog.findViewById(R.id.admEditImage);
editTitle.setText(uploadOb.getTitle());
editDesc.setText(uploadOb.getDescription());
editDate.setText(uploadOb.getDate());
editTime.setText(uploadOb.getTime());
imageUrl = uploadOb.getImage();
Picasso.get().load(imageUrl).into(editImage);
editImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent chooseImage = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
}
});
noteId=uploadOb.getMsgKey();
Button buttonUpdate = dialog.findViewById(R.id.admEditDoneBtn);
final String finalImageUrl = imageUrl;
buttonUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMM yyyy");
Calendar calendar = Calendar.getInstance();
noteDate = simpleDateFormat.format(calendar.getTime());
String title = editTitle.getText().toString();
String description = editDesc.getText().toString();
String date = editDate.getText().toString();
String time = editTime.getText().toString();
Upload upload = new Upload(title,description,date,time, finalImageUrl,noteDate,noteId);
updateInterface.UpdateEvents(upload);
}
});
}
public void confirmDeleteDialog(final Upload upload){
final Dialog dialog = new Dialog((mContext));
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_delete);
dialog.show();
TextView delete = dialog.findViewById(R.id.admDelete);
TextView cancel = dialog.findViewById(R.id.admCancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateInterface.DeleteEvents(upload);
dialog.dismiss();
}
});
}
}
Interface
public interface UpdateInterface {
public void UpdateEvents(Upload upload);
public void DeleteEvents(Upload upload);
}
Main Activity.
public class MainActivityAdminEdit extends AppCompatActivity implements UpdateInterface{
private RecyclerView mRecyclerView;
private AdminAdapter mAdapter;
private ProgressBar mProgressCircle;
private DatabaseReference mDatabaseRef;
private ArrayList<Upload> mUploads = new ArrayList<>();;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_edit);
assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mRecyclerView = findViewById(R.id.admRecyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mProgressCircle = findViewById(R.id.admProgressCircle);
mDatabaseRef = FirebaseDatabase.getInstance().getReference("MESSAGES");
mDatabaseRef.keepSynced(true);
read();
}
private void read(){
mDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mUploads.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Upload upload = postSnapshot.getValue(Upload.class);
mUploads.add(upload);
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivityAdminEdit.this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
mRecyclerView.setLayoutManager(linearLayoutManager);
mAdapter = new AdminAdapter(MainActivityAdminEdit.this,mUploads);
mRecyclerView.setAdapter(mAdapter);
mProgressCircle.setVisibility(View.INVISIBLE);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(MainActivityAdminEdit.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
mProgressCircle.setVisibility(View.INVISIBLE);
}
});
}
@Override
public void UpdateEvents(Upload upload) {
mDatabaseRef.child(upload.getMsgKey()).setValue(upload).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(MainActivityAdminEdit.this, "Update Successful", Toast.LENGTH_SHORT).show();
read();
} else {
Toast.makeText(MainActivityAdminEdit.this, "Error", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void DeleteEvents(Upload upload) {
mDatabaseRef.child(upload.getMsgKey()).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(MainActivityAdminEdit.this, "Successfully deleted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivityAdminEdit.this, "Error", Toast.LENGTH_SHORT).show();
}
}
});
}
}
I added an onClickListener to the ImageView that's in Dialog. When I click on it Iwant it to select image from gallery and display it and also ask permissions. But it's not working. If you know any solution it would be very helpful.
来源:https://stackoverflow.com/questions/61850959/select-image-option-inside-a-dialog