如何刷新主视图?

时间:2019-04-24 11:25:33

标签: android kotlin

我的活动中有3个片段,每个片段的编号分别为1,2和3。如果完成片段1,则相关的视图内容将被第二个片段替换,并且对于frgs而言也是相同的。 2&3。

我可以在操作栏中更改应用程序。语言,当我更改语言时,我需要使用新的资源刷新相关的布局,为此,我使用了:

   private fun refreshView() {
        this.recreate()
   }

我的铅。是在重新创建活动时,而我在第二个或第三个片段中,则该活动返回到第一个。

我该如何解决?是否有解决方案以刷新视图而不重新创建活动?

4 个答案:

答案 0 :(得分:0)

尝试创建静态常量类或应用程序类,在其中可以将当前片段保存为count或string,并在重新创建后显示保存在上述类中的Fragment。

答案 1 :(得分:0)

您可以将片段编号保存在SharedPreference中。但是在我看来,重新创建活动是错误的方法。您应该只重新加载当前片段中的所有数据。

答案 2 :(得分:0)

我建议您阅读本文档,其中介绍了如何保存UI状态:https://developer.android.com/topic/libraries/architecture/saving-states

在我看来,结合LiveData,ViewModel可以很好地解决您的问题。

ViewModel:https://developer.android.com/topic/libraries/architecture/viewmodel

LiveData:https://developer.android.com/topic/libraries/architecture/livedata

答案 3 :(得分:0)

public class MainActivity extends AppCompatActivity {
private int fragmentIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = findViewById(R.id.btn_next);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            fragmentIndex++;
            if (fragmentIndex >= 3) {
                fragmentIndex = 0;
            }
            showFragment(fragmentIndex);
        }
    });
    //get the index saved
    if (savedInstanceState != null) {
        fragmentIndex = savedInstanceState.getInt("index");
    }
    showFragment(fragmentIndex);
}

//override this function to save fragment index. This function will be called when activity is destroyed.
//And when activity is recreated, you can get the index from the savedInstanceState as code above.
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("index", fragmentIndex);
}



private void showFragment(int index) {
    Fragment fragment = SimpleFragment.createFragment(String.valueOf(index));
    getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
}

public static class SimpleFragment extends Fragment {
    public static SimpleFragment createFragment(String index) {
        SimpleFragment fragment = new SimpleFragment();
        Bundle bundle = new Bundle();
        bundle.putString("index", index);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_simple, container, false);
        TextView indexView = rootView.findViewById(R.id.tv_index);
        String index = getArguments().getString("index");
        indexView.setText(index);
        return rootView;
    }
}

}

通过旋转设备使活动重新创建,您可以在覆盖或不覆盖onSaveInstanceState函数的情况下测试我的代码