Я реализую проект, в котором пользователь может загружать и извлекать файлы обратно из Firebase, эти файлы включают в себя изображения, PDF и, возможно, документы, поэтому я хочу, чтобы извлеченные файлы отображались в ListView в зависимости от типа, к которому они относятся. будет показан со значком слева, для файла PDF - значок PDF, для файла изображения - значок IMG и т. д.
У меня нет большого опыта работы с ListView и с Android в целом, я мог бы выяснить, как добавить пользовательский значок, но на самом деле не справиться с этой задачей, если бы кто-нибудь дал мне хотя бы подсказку, я был бы очень признателен.
Ниже я показываю код и приложение, удаляя части кода, которые не имеют значения;
Изображение приложения
public class Kompjuterike extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kompjuterike);
displayUpload();
editPdfName = (EditText) findViewById(R.id.txtuploadfile);
pdfupload = (ImageView) findViewById(R.id.pdfuploadimg);
imgupload = (ImageView) findViewById(R.id.imguploadimg);
storageReference = FirebaseStorage.getInstance().getReference();
databaseReference =
FirebaseDatabase.getInstance().getReference(databasepath);
}
private void selectPDFFile() {
Intent intent=new Intent();
intent.setType("application/pdf");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"select pdf file"),1);
}
private void selectIMGFile() {
Intent intent=new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"select img file"),1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1 && resultCode==RESULT_OK && data!=null && data.getData()!=null){
uploadFile(data.getData());
}
}
private void uploadFile(Uri data) {
final ProgressDialog progressDialog=new ProgressDialog(this);
progressDialog.setTitle("Uploading file...");
progressDialog.show();
final StorageReference reference=storageReference.child(databasepath+"/"+System.currentTimeMillis());
reference.putFile(data).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(Kompjuterike.this, "Upload successful!", Toast.LENGTH_LONG).show();
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String url = uri.toString();
Upload upload = new Upload(editPdfName.getText().toString(), url);
String uploadId = databaseReference.push().getKey();
databaseReference.child(uploadId).setValue(upload);
Toast.makeText(Kompjuterike.this, "File Uploaded", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
});
}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress=(100.0*taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount();
progressDialog.setMessage("Uploaded: "+(int)progress+"%");
}
});
}
private void displayUpload(){
uploadList = new ArrayList<>();
listView = (ListView) findViewById(R.id.listView1);
//adding a clicklistener on listview
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//getting the upload
Upload upload = uploadList.get(i);
//Opening the upload file in browser using the upload url
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(upload.getUrl()));
startActivity(intent);
}
});
//getting the database reference
databaseReference = FirebaseDatabase.getInstance().getReference(databasepath);
//retrieving upload data from firebase database
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Upload upload = postSnapshot.getValue(Upload.class);
uploadList.add(upload);
}
String[] uploads = new String[uploadList.size()];
for (int i = 0; i < uploads.length; i++) {
uploads[i] = uploadList.get(i).getName();
}
//displaying it to list
adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.listview_color,R.id.list_content, uploads);
listView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}