gpt4 book ai didi

android - addToBackStack() 在按下后退按钮时复制原始 fragment

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:42 24 4
gpt4 key购买 nike

每当我按下我的应用程序的后退按钮时,就会发生以下情况。

原创手机展示:FragA

点击 FragA 上的 View 后手机展示:FragB

点击返回按钮后手机显示: fragment A fragment A

我不知道为什么 FragA 被重新创建,但在按下后退按钮时添加到前一个 FragA 的末尾。下面是我的代码。

public class ColorListFragment extends ListFragment {
private List<ColorGD> mDrawableList = null;
private ColorAdapter mAdapter = null;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_color_list, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState){

super.onActivityCreated(savedInstanceState);
populateList();
getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ColorGD viewItem = mDrawableList.get(position);
float[] hues = {viewItem.getColor(0),viewItem.getColor(1)};

Bundle args = new Bundle();
final String hueValues = "hues";
args.putFloatArray(hueValues,hues);

SaturationListFragment sLF = new SaturationListFragment();
sLF.setArguments(args);

FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container,sLF);
transaction.addToBackStack(null);
transaction.commit();
}
});
}

我的主要 Activity 有以下内容

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addListFragment();
}

public void addListFragment(){
ColorListFragment cLF = new ColorListFragment();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.container,cLF);
transaction.commit();
}
}

最佳答案

我想我明白这里发生了什么。 Fragment 只用一个 View 容器是不可能复制的。

我怀疑由于在 onActivityCreated() 中调用了 populateList(),您的 ListFragment 中的项目被复制了。

因为每次点击后退按钮从SaturationListFragment返回ColorListFragment时都会调用onActivityCreated(),所以在调用 populateList() 每次。参见 documentation here

为了解决您的问题,只需将对 populateList() 的调用移动到 onCreate(),它仅在第一次 ListFragment< 时被调用 已初始化:

public class ColorListFragment extends ListFragment {
private List<ColorGD> mDrawableList = null;
private ColorAdapter mAdapter = null;

//add the onCreate() override
@Override
public void onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
populateList(); //add this here
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_color_list, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
//populateList(); //remove this
//..................

关于android - addToBackStack() 在按下后退按钮时复制原始 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com