微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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我无法将其写为评论,因此将其发布在答案中.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐