我已经看到Link1这个问题,但可以正确理解。我有一个加载列表的片段。当我单击列表项时,它将打开另一个活动。但是我按下返回按钮,它将再次加载列表。我希望它与以前的滚动位置相同。在上面提到的链接中,它指定使用标志,但我不明白这一点。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dashboard);
    android.app.Fragment fragment = new MeFragment();
    getFragmentManager().beginTransaction().replace(R.id.layout_FragmentsContainer, fragment).addToBackStack(null).commit();
   }
}

public class MeFragment extends Fragment
{
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
  {
    return inflater.inflate(R.layout.fragment_me, container, false);
  }
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    meLV = (ListView) getView().findViewById(R.id.lv_Inbox);
    loadingListProgress = (ProgressBar) getView().findViewById(R.id.progress_LoadingList);
    meList = new ArrayList<Message>();
    meAdapter = new MessagesListAdapter(getActivity(), meList);
    //addFooter();
    meLV.setAdapter(meAdapter);
    meLV.setOnItemClickListener(this);
    pageCount = 0;
    loadmoreProgressDialog = new ProgressDialog(getActivity());
    loadmoreProgressDialog.setTitle("Please wait ...");
    loadmoreProgressDialog.setMessage("Loading more ...");
    loadmoreProgressDialog.setCancelable(true);
    loadUserMessages();
    meLV.setOnScrollListener(new EndlessScrollListener() {
        @Override
        public void onLoadMore(int page, int totalItemsCount) {
            // TODO Auto-generated method stub
            //addFooter();
            loadmoreProgressDialog.show();
            loadUserMessages();
        }
    });
  }
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    // TODO Auto-generated method stub
    Utils.showToast_msg(getActivity(), "MessageItemClicked");
    ReferralDetailFragment fragment = new ReferralDetailFragment();
    getFragmentManager().beginTransaction().replace(R.id.layout_FragmentsContainer, fragment).addToBackStack(null).commit();

  }
}

public class ReferralDetailFragment extends Fragment implements OnClickListener {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.fragment_referraldetail,container, false);
    linkToAcknowledge   = (TextView) view.findViewById(R.id.lbl_Link_to_Acknowledge);
    return view;
  }
}

最佳答案

我在我的应用程序中为此实现了一个简单的解决方案,基本上是当您再次按回该片段时,将调用onCreateView()。在onCreateView()中,您已经完成了所有初始化,因此我们进行了更改

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.fragment_me, container, false);
    /*
     *Whatever you want to do
     *
     */
    return view;
}


至:

View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    if(view==null){

        view = inflater.inflate(R.layout.fragment_me, container, false);
        /*
         *Whatever you want to do
         *
         */
    }
    else{
         ((ViewGroup)view.getParent()).removeView(view);
    }
    return view;
}


在这里,我们将View视图移到外面并使其成为类变量。因此,如果是第一次调用该片段,则该片段为null并进行初始化,否则进入黑色。需要其他块,因为onCreateView()将它返回的任何内容添加为视图的父级的子代,因此,由于视图已经存在,因此我们将其删除,而onCreateView会自动将其再次添加。

关于android - 维护 fragment 的 View 状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24753024/

10-10 08:22