将片段添加到后台堆栈(在背面按下时获得空白屏幕)

时间:2016-05-04 14:29:59

标签: android android-fragments back-stack

我有两个片段,第一个叫做Summer Jobs Fragment,它包含一个项目列表,第二个叫做Summer Jobs Details Frgment,其中包含每个项目的详细信息。我试图设置回跟踪,以便当我按下Summer Jobs Detail Fragment的后退按钮时,我会回到Summer Jobs Fragment。

这是我从SJF到SJDF的初步过渡的代码:

public void onItemClick(
                    AdapterView<?>parent,View view, int position, long id) {

                SummerJobDetailsFragment.mMyAppsBundle.
                        putInt("value", position);
                SummerJobDetailsFragment fragment =
                        new SummerJobDetailsFragment();
                FragmentManager fragmentManager =
                        getFragmentManager();
                list.setVisibility(parent.INVISIBLE);
                fragmentManager.beginTransaction().replace(R.id.displayjobs_detailed, fragment).
                        addToBackStack( "tag" ).commit();

            }

以下是我在main中修改OnBackPressed()的方法:

public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (getFragmentManager().getBackStackEntryCount() > 0 ) {
            getFragmentManager().popBackStack();

        } else {
            super.onBackPressed();

        }
    }

但是当我按下SJDF的后退键时,我得到一个空白屏幕:

list view details After back is pressed

3 个答案:

答案 0 :(得分:3)

fragmentTransaction.addToBackStack()&lt; - 不要在第一个片段中包含此内容.--&gt;

if(getSupportFragmentManager().getBackStackEntryCount() !=1){
                fragmentTransaction.addToBackStack(null);
            }

答案 1 :(得分:2)

只需在您的活动中使用此代码:

@Override
public void onBackPressed() {

    getFragmentManager().executePendingTransactions();
    int count = getFragmentManager().getBackStackEntryCount();

    if (count <= 1) {
        finish();           
    } else {
        getFragmentManager().popBackStack();
    }

}

也许您需要使用getSupportFragmentManager()代替。

答案 2 :(得分:0)

在这种情况下,请在onResume()方法中填充ListView,例如

@Override
public void onResume() {
        super.onResume();
        CustomAdapter customAdapter = new CustomAdapter(this, R.layout.itemlistrow, List<yourItem>);    
        yourListView.setAdapter(customAdapter);
    }