0

这些是我的主要活动和我的片段。每当我回到底栏视图的该选项卡上时,我都不想重新加载片段。事实上,现在每次我点击该选项卡的图像重新加载。 任何解决方案?底部条块片段重新加载

主要活动

public class MainActivity extends AppCompatActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    BottomNavigationView bottomNavigationView = (BottomNavigationView) 
      findViewById(R.id.navigation); 

    bottomNavigationView.setOnNavigationItemSelectedListener 
      (new BottomNavigationView.OnNavigationItemSelectedListener() { 
       @Override 
       public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
        Fragment selectedFragment = null; 

        switch (item.getItemId()) { 
         case R.id.action_item1: 

           selectedFragment = Tab1.newInstance(); 

          break; 
         case R.id.action_item2: 
          selectedFragment = Tab2.newInstance(); 
          break; 
         case R.id.action_item3: 
          selectedFragment = Tab3.newInstance(); 
          break; 
        } 
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
        transaction.replace(R.id.frame_layout, selectedFragment); 
        transaction.commit(); 
        return true; 
       } 
      }); 

    //Manually displaying the first fragment - one time only 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.frame_layout, Tab1.newInstance()); 
    transaction.commit(); 

    //Used to select an item programmatically 
    //bottomNavigationView.getMenu().getItem(2).setChecked(true); 
} 
} 

片段

public class Tab1 extends Fragment { 
ImageView imageview; 
ProgressDialog progressDialog; 
public static Tab1 newInstance() { 
    Tab1 fragment = new Tab1(); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_tab1, container, false); 

    imageview =(ImageView) rootView.findViewById(R.id.immagine); 
    FirebaseStorage storage = FirebaseStorage.getInstance(); 
    StorageReference storageRef = storage.getReferenceFromUrl("gs://test-x3b2c.appspot.com").child("lc.jpg"); 

    //download file as a byte array 

    progressDialog = ProgressDialog.show(getActivity(), "Attendi", 
      "Sto caricando il luogo comune", true); 
    try { 
     final File localFile = File.createTempFile("images", "jpg"); 
     storageRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { 
       Bitmap bitmap = BitmapFactory.decodeFile(localFile.getAbsolutePath()); 
       imageview.setImageBitmap(bitmap); 
       progressDialog.dismiss(); 

      } 
     }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
      } 
     }); 
    } 
    catch (IOException e) { 
    } 
    return rootView; 
} 
} 
+0

是的,你可以设置标签的片段时,乌尔调用next片段然后隐藏当前一旦你回到以前那么按标签找到片段,告诉你前面的片段 –

+0

https://stackoverflow.com/questions/8432193/how-to-implement-show-and-hide-fragment-inside-fragment-in-android –

回答

0

修改你的代码是这样的:

switch (item.getItemId()) { 
        case R.id.action_item1: 
         selectedFragment = Tab1.newInstance(); 
         break; 
        case R.id.action_item2: 
         selectedFragment = Tab2.newInstance(); 
         break; 
        case R.id.action_item3: 
         selectedFragment = Tab3.newInstance(); 
         break; 
       } 

       if(selectedFragment ! =null) { 
       FragmentTransaction transaction = 
         getSupportFragmentManager().beginTransaction(); 
       transaction.replace(R.id.frame_layout, selectedFragment, selectedFragment.getTag()); 
       transaction.commit(); 
       } 

       return true; 

    } 

片段标签避免再次再造一个片段,如果它已经存在。

+0

我有与该代码相同的问题...我必须添加一些东西到片段? –

+0

你不需要添加任何东西到你的片段。只要确保每次替换片段时,都添加了transaction.replace(R.id.frame_layout,selectedFragment,selectedFragment.getTag()); selectedFragment.getTag()是非常重要的,如果你不想重新创建片段 –

+0

好吧,但如果我复制你的代码,它像以前一样重新加载片段...也许我必须添加一些东西,以防止突破部分?谢谢 –