我有一个片段(FragmentUpload),其中包含几个textviews和edittext。当用户单击上载按钮(如图中所示)时,用户将被发送到不同的片段,在该片段中,用户可以从选项中进行选择,并且所选的字符串将显示在片段上载的适当文本视图中。我的问题是,当用户单击不同的上传按钮以为不同的textview(从单独的片段)选择不同的字符串时,代码不保存以前的值。例如,当用户从艺术家片段中选择艺术家时,文本视图将显示所选艺术家。现在,当用户单击“上传专辑”按钮选择专辑时,该代码仅在与专辑相关联的textview中显示所选专辑,但以前选择的字符串(艺术家字符串)不再可用。请帮助我(我是android和java的新手)
package com.example.realsungjoen;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Handler;
import android.provider.OpenableColumns;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;
import java.util.Set;
public class FragmentUpload extends Fragment {
private static final int PICK_IMAGE_REQUEST = 1;
private final static int PICK_SONG_REQUEST = 2;
private Button mBtnChooseImg;
private Button mBtnUpload;
private Button mBtnChooseSong;
private Button cancelButton;
private ImageView addselectArtists;
private ImageView addSelectGenre;
private ImageView addSelectAlbum;
private ImageView addSelectLanguage;
private ImageView mImageView;
private EditText mEditTextFileName;
private TextView mSongFile;
private TextView selectedArtist;
private TextView selectedAlbum;
private TextView selectedGenre;
private TextView selectedLanguage;
private ProgressBar mProgressBar;
private Uri mImageUri;
private Uri uriImage;
private Uri mSongUri;
private StorageReference mStorageImageRef;
private DatabaseReference mDatabaseRef;
private DatabaseReference mDatabaseRefArtist;
private StorageReference mStorageSongRef;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View uploadViews = inflater.inflate(R.layout.fragment_upload, container,false);
mBtnChooseImg = uploadViews.findViewById(R.id.btn_chose_img);
mBtnChooseSong = uploadViews.findViewById(R.id.btn_choose_song);
mBtnUpload = uploadViews.findViewById(R.id.btn_upload);
cancelButton = uploadViews.findViewById(R.id.cancel_button);
mEditTextFileName = uploadViews.findViewById(R.id.edit_text_file_name);
mSongFile = uploadViews.findViewById(R.id.track_file_view);
mProgressBar = uploadViews.findViewById(R.id.progress_bar);
mImageView = uploadViews.findViewById(R.id.image_view);
addselectArtists = uploadViews.findViewById(R.id.addArtist_img);
addSelectGenre = uploadViews.findViewById(R.id.addGenre_img);
addSelectAlbum = uploadViews.findViewById(R.id.addAlbum_img);
addSelectLanguage = uploadViews.findViewById(R.id.addLanguage_img);
selectedArtist = uploadViews.findViewById(R.id.artists);
selectedAlbum = uploadViews.findViewById(R.id.album);
selectedGenre = uploadViews.findViewById(R.id.genre);
selectedLanguage = uploadViews.findViewById(R.id.language);
mStorageImageRef = FirebaseStorage.getInstance().getReference("Images");
mStorageSongRef = FirebaseStorage.getInstance().getReference("Songs");
mDatabaseRef = FirebaseDatabase.getInstance().getReference("Data Uploads");
mDatabaseRefArtist = FirebaseDatabase.getInstance().getReference("Artists");
uriImage = Uri.parse("https://media.kasperskydaily.com/wp-content/uploads/sites/92/2019/12/09084248/android-device-identifiers-featured.jpg");
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
final Toolbar toolbar = uploadViews.findViewById(R.id.toolbar_upload);
toolbar.setTitle("Upload Songs");
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MySongFragment mySongFragment = new MySongFragment();
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
if (fragment == null){
fragmentManager.beginTransaction()
.add(R.id.fragment_container, mySongFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(null)
.commit();
}else {
fragmentManager.beginTransaction()
.replace(R.id.fragment_container, mySongFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(null)
.commit();
}
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}
});
mBtnChooseImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openImageChooser();
}
});
mBtnChooseSong.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openSongChooser();
}
});
addselectArtists.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChooseArtistFragment chooseArtistFragment = new ChooseArtistFragment();
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, chooseArtistFragment)
.addToBackStack(null)
.commit();
}
});
addSelectGenre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//go to choose/select genre here
ChooseGenreFragment chooseGenreFragment = new ChooseGenreFragment();
getFragmentManager().beginTransaction()
.add(R.id.fragment_container,chooseGenreFragment)
.addToBackStack(null)
.commit();
}
});
addSelectAlbum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChooseAlbumFragment chooseAlbumFragment = new ChooseAlbumFragment();
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, chooseAlbumFragment)
.addToBackStack(null)
.commit();
}
});
addSelectLanguage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChooseLanguageFragment chooseLanguageFragment = new ChooseLanguageFragment();
getFragmentManager().beginTransaction()
.add(R.id.fragment_container,chooseLanguageFragment)
.addToBackStack(null)
.commit();
}
});
mBtnUpload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
uploadFile();
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new MySongFragment())
.remove(new FragmentUpload())
.addToBackStack(null)
.commit();
ViewGroup mContainer = getActivity().findViewById(R.id.uploadFragment);
mContainer.removeAllViews();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}
});
return uploadViews;
}
@Override
public void onStart() {
super.onStart();
Bundle bundle = this.getArguments();
if (bundle == null){
selectedArtist.setText("No Artist Selected");
selectedGenre.setText("No Genre Selected");
selectedLanguage.setText("No Language Selected");
selectedAlbum.setText("No Album Selected");
return;
}
String string = "";
for (String key : bundle.keySet()){
string += key;
switch (string){
case "artistList":
String myValue = bundle.getString("artistList");
selectedArtist.setText(myValue);
break;
case "albumList":
String myValue1 = bundle.getString("albumList");
selectedAlbum.setText(myValue1);
break;
case "langaugeList":
String myValue2 = bundle.getString("languageList");
selectedLanguage.setText(myValue2);
break;
case "genreList":
String myValue3 = bundle.getString("genreList");
selectedGenre.setText(myValue3);
break;
}
}
}
private void openSongChooser(){
Intent intent = new Intent();
intent.setType("audio/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,PICK_SONG_REQUEST);
}
private void openImageChooser(){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, PICK_IMAGE_REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK
&& data != null && data.getData() != null){
mImageUri = data.getData();
Picasso.get().load(mImageUri).resize(1000,1000).centerCrop().into(mImageView);
// mImageView.setImageURI(mImageUri);
}
if (requestCode == PICK_SONG_REQUEST && resultCode ==Activity.RESULT_OK
&& data != null && data.getData() != null){
mSongUri = data.getData();
Cursor cursor = getActivity().getContentResolver().query(mSongUri,null,null,null,null);
int nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
String mimeType = getFileExtension(mSongUri);
cursor.moveToFirst();
mSongFile.setText(cursor.getString(nameIndex)+"."+ mimeType);
}
}
private String getFileExtension(Uri uri){
ContentResolver cR = getActivity().getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
return mime.getExtensionFromMimeType(cR.getType(uri));
}
private void uploadFile(){
if (mImageUri != null){
StorageReference fileReferece = mStorageImageRef.child(System.currentTimeMillis()
+ "." + getFileExtension(mImageUri));
fileReferece.putFile(mImageUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mProgressBar.setProgress(0);
}
}, 5000);
Toast.makeText(getActivity(), "Image Upload Successful", Toast.LENGTH_SHORT).show();
Task<Uri> uriTaskImage = taskSnapshot.getStorage().getDownloadUrl();
while (!uriTaskImage.isSuccessful());
Uri downloadUriImage = uriTaskImage.getResult();
uriImage = downloadUriImage;
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
mProgressBar.setProgress((int)progress);
}
});
}else{
Toast.makeText(getActivity(), "No Image File Selected", Toast.LENGTH_SHORT).show();
}
if (mSongUri != null){
StorageReference fileRef = mStorageSongRef.child(System.currentTimeMillis()
+"." + getFileExtension(mSongUri));
fileRef.putFile(mSongUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mProgressBar.setProgress(0);
}
}, 5000);
Toast.makeText(getActivity(), "Track Upload Successful", Toast.LENGTH_SHORT).show();
Task<Uri> uriTaskSong = taskSnapshot.getStorage().getDownloadUrl();
while (!uriTaskSong.isSuccessful());
Uri downloadUriSong = uriTaskSong.getResult();
Upload upload = new Upload(mEditTextFileName.getText().toString().trim(),
downloadUriSong.toString(),uriImage.toString(), selectedArtist.getText().toString().trim());
String uploadIdSong = mDatabaseRef.push().getKey();
mDatabaseRef.child(uploadIdSong).setValue(upload);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
mProgressBar.setProgress((int)progress);
}
});
}else {
Toast.makeText(getActivity(), "No Song File Selected", Toast.LENGTH_SHORT).show();
}
}
}