Select image option inside a Dialog

送分小仙女□ 提交于 2020-06-09 05:17:11

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!