android-按后退按钮可重新创建Listview片段

我在ListView片段中使用了加载程序,并且在按“后退”按钮时已重新创建它.你能告诉我如何处理这个senario吗?

这是我的ListView片段代码.在这里,我有一个布尔变量,在单击列表项时将其设置为true.但是一旦按下后退按钮,onCreateView将被调用,因此后退按钮将为false.

public class GTFragment  extends SherlockFragment implements LoaderCallbacks<Cursor>{

    ListView mTListview = null;
    GoogleTasksAdapter mGTasksAdapter = null;
    private SQLiteCursorLoader mTLoader=null;
    private LoaderManager mTLoaderManager;
    private String mSelectedListID = null; 
    private boolean mIsBackbuttonisPressed = false;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.task_home_activity, container, false);


    if(!mIsBackbuttonisPressed)
        getLoaderManager().initLoader(0, null, this);

     mTListview   = (ListView) view.findViewById(R.id.id_task_list_home_activity);

     mGTasksAdapter = new GoogleTasksAdapter(getActivity());

     mTListview.setOnItemClickListener(new OnItemClickListener() {

         @Override
         public void onItemClick(AdapterView<?> listview,
            View clickedview, int position, long arg3) {
            // TODO Auto-generated method stub

            GoogleTaskItem item = new GoogleTaskItem();

            Cursor coursor = ((GoogleTasksAdapter)listview.getAdapter()).getCursor();



            if(coursor.moveToPosition(position))
            {


                mIsBackbuttonisPressed = true;
                GoogleTaskController.get_googletask_controllerObj()
                  .LaunchTaskPreviewActivity();                 
            }

        }

    });

   mTListview.setAdapter(mGTasksAdapter);  
   mIsBackbuttonisPressed = false;

   return view;

  }

我的片段活动类代码

public class TLActivity extends SherlockFragmentActivity {

    LeftSliderTaskListOptions mTaskOptionsFragment = null;
    GoogleTasksFragment mTFragment = null;

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



        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        setContentView(R.layout.layout_gt_list);


//      FragmentTransaction tfragment = this.getSupportFragmentManager().beginTransaction();
        mTFragment = new GTasksFragment();
        t.replace(R.id.id_tfragment, mTFragment);
        t.commit();


    }

解决方法:

您有多种选择可解决此问题.

>像这样重写onSaveInstanceState:

@Override
public void onSaveInstanceState (Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean("mIsBackbuttonisPressed", mIsBackbuttonisPressed);
}

然后在onCreateView中,可以通过以下方式获取变量:

if (savedInstanceState != null)
    mIsBackbuttonisPressed = savedInstanceState.getBoolean("mIsBackbuttonisPressed", false);

>您可以设置this.setRetainInstance(true);在片段的onCreate方法中.

如果您可以将活动代码与创建片段一起发布,我也可以告诉您其他选择. (PS我无法将其写为评论,因此将其发布在答案中.)

上一篇:我在项目中使用带有PHP的工作单位设计模式


下一篇:java-`notifyDataSetChanged`我缺少什么?