当前位置: 首页 > 知识库问答 >
问题:

底部条形图碎片重新加载

阎乐池
2023-03-14

这些是我的主要活动和我的片段。我不想每次返回底部栏视图的选项卡时都重新加载片段。事实上,现在每次我单击该选项卡时,图像都会重新加载。有什么解决方案吗?

主要活动

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;
}
}

共有1个答案

慕俊迈
2023-03-14

按如下方式修改代码:

    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;

    }

如果片段已经存在,则片段标记可以避免再次重新创建该片段。

 类似资料:
  • 我使用chart.js在我的网页上有一个BarChart。 我在其中添加了两个数据点 现在我想要更新那些条A和B,而不是删除它们并再次添加它们(我已经想好了如何做到这一点)。我想让它们垂直移动以适应它们的新值,但我无法找到如何访问图表中已经存在的数据。 没有什么比得上 其中第一个值将是存储数据的索引(F.E.)。 我该怎么做呢?

  • 我是Android开发新手,所以我不明白很多,也许是基本的东西,也许甚至陈述的主题也没有完全反映我的问题,我事先道歉,我不能更准确地表述。请帮我回答一些问题。 我的应用程序中有一个底部导航,有三个菜单项。就像图片上一样: 底部导航 最初,我是按照标准的Android Studio示例来做的: 在这段代码中,菜单项切换片段,保存每个片段的状态(我不知道具体如何,它似乎在导航控制器内部的某个地方)。

  • 本文向大家介绍内部碎片与外部碎片之间的区别,包括了内部碎片与外部碎片之间的区别的使用技巧和注意事项,需要的朋友参考一下 在从内存中加载和删除进程时,可用内存空间会分成几小块。考虑到有时由于无法将进程分配给存储块而导致其无法使用,因此有时无法将其分配给存储块。此问题称为碎片。 内部碎片 分配给进程的内存块更大。内存的某些部分未使用,因为它不能被其他进程使用。通过有效分配最小的分区但足够大的分区,可以

  • 问题内容: 我只是很好奇,因为我已经在FragmentActivity中设置了Fragment选项卡,如何从FragmentActivity或Fragment本身重新加载片段,以清除并重新加载该选项卡。我本质上需要重新选择选项卡以替换片段时发生的相同事情。有一种简单的方法可以执行此操作并重新加载片段吗? 问题答案: 创建一个方法,该方法开始FragmentTransaction,分离片段,然后提交

  • 问题内容: 我将如何更新每两秒钟在服务器上更新一次的映像,而无需用户按下刷新按钮,我的第一个猜测是ajax,但我之前从未真正使用过它。有人能指出我正确的方向吗? 编辑:忘记提及图像是由perl脚本生成的.gif-尝试通过url抓取它返回脚本 问题答案: 您的Perl脚本似乎有问题。尝试通过URL访问图像应该仍然返回图像。它应该返回二进制数据而不是脚本。您还应该将响应的Content- type标头

  • 我有以下数据: 这导致了下图: 我需要在每个栏的顶部添加值。需要帮助吗?