列表视图片段得到重新在pressing后退按钮视图、片段、按钮、列表

2023-09-05 09:47:21 作者:煙雨う

我用装载机在我的的ListView 片段,而且越来越重建的pressing后退按钮。你能告诉我如何处理这种塞纳里奥?

下面是我的的ListView 片段code。在这里,我有我的点击列表项设置为布尔变量。但一旦后退按钮是pressed onCreateView 将被调用所以后退按钮将是错误的。

 公共类GTFragment扩展SherlockFragment实现LoaderCallbacks<光标> {

    ListView控件mTListview = NULL;
    GoogleTasksAdapter mGTasksAdapter = NULL;
    私人SQLiteCursorLoader mTLoader = NULL;
    私人LoaderManager mTLoaderManager;
    私人字符串mSelectedListID = NULL;
    私人布尔mIsBackbuttonis pressed = FALSE;

公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){

    查看查看= inflater.inflate(R.layout.task_home_activity,集装箱,假);


    如果(!mIsBackbuttonis pressed)
        getLoaderManager()initLoader(0,空,这一点)。

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

     mGTasksAdapter =新GoogleTasksAdapter(getActivity());

     mTListview.setOnItemClickListener(新OnItemClickListener(){

         @覆盖
         公共无效onItemClick(适配器视图<>列表视图,
            查看clickedview,INT位置,长ARG3){
            // TODO自动生成方法存根

            GoogleTaskItem项目=新GoogleTaskItem();

            光标coursor =((GoogleTasksAdapter)listview.getAdapter())getCursor()。



            如果(coursor.moveToPosition(位置))
            {


                mIsBackbuttonis pressed = TRUE;
                GoogleTaskController.get_googletask_controllerObj()
                  .LaunchTask previewActivity();
            }

        }

    });

   mTListview.setAdapter(mGTasksAdapter);
   mIsBackbuttonis pressed = FALSE;

   返回查看;

  }
 

我的片段活动课code

 公共类TLActivity扩展SherlockFragmentActivity {

    LeftSliderTaskListOptions mTaskOptionsFragment = NULL;
    GoogleTasksFragment mTFragment = NULL;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);



        getSupportActionBar()setDisplayHomeAsUpEnabled(真)。
        getSupportActionBar()setHomeButtonEnabled(真)。

        的setContentView(R.layout.layout_gt_list);


// FragmentTransaction tfragment = this.getSupportFragmentManager()的BeginTransaction()。
        mTFragment =新GTasksFragment();
        t.replace(R.id.id_tfragment,mTFragment);
        t.commit();


    }
 
页面视图中添加Word2003多页显示按钮

解决方案

您有多种选择来纠正这个问题。

覆盖的onSaveInstanceState是这样的:

  @覆盖
公共无效的onSaveInstanceState(包outState){
    super.onSaveInstanceState(outState);
    outState.putBoolean(mIsBackbuttonis pressed,mIsBackbuttonis pressed);
}
 

,然后在你的onCreateView你能得到你变回:

 如果(savedInstanceState!= NULL)
    mIsBackbuttonis pressed = savedInstanceState.getBoolean(mIsBackbuttonis pressed,假);
 

您可以设置 this.setRetainInstance(真); 在你的onCreate您片段的方法

如果你可以发布您的活动code与创建您的片段我还可以告诉你其他的选择。 (PS我不能把它写成一个注释,以便张贴在答案。)

I'm using loader in my ListView fragment, and it's getting recreated on pressing "back" button. Can you tell me how to handle this senario?

Here is my ListView fragment code. Here I have a boolean variable that I'm setting as true on clicking on list item. but once the back button is pressed onCreateView will get called so the backbutton will be 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;

  }

My fragment activity class code

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();


    }

解决方案

You have multiple options to rectify this issue.

Override onSaveInstanceState like this:

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

and then in your onCreateView you can get your variable back by:

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

You can set this.setRetainInstance(true); in your onCreate method of your fragment.

If you could post your Activity code with creates your fragment I can also tell you other options. (P.S I cannot write it as a comment so posting it in the answer.)