java - ListFragments 不会自动恢复数据集吗?

标签 java android android-fragments android-activity android-listfragment

我有一个扩展 ListFragment 的 fragment ,当我最小化应用程序并返回到它时, ListView 为空。

不会自动恢复吗?

public class LocationListViewFrag extends ListFragment implements AdapterView.OnItemClickListener {

    private static final String TAG = "LocationListViewFrag";

    private ArrayList<LocationObj> mLocations = new ArrayList<>();
    private LocationAdapter mTaxAdapter;
    private LocationListViewListener mListener;

    @Bind(R.id.listLabel)
    TextView listLabel;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mTaxAdapter = new LocationAdapter(getActivity(), mLocations);
        setListAdapter(mTaxAdapter);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_tax_location_list, container, false);
        ButterKnife.bind(this, v);
        return v;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getListView().setOnItemClickListener(this);

    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            mListener = (LocationListViewListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString() + " must implement LocationListViewListener");
        }
    }

    public void setLocations(ArrayList<LocationObj> Locations) {
        mLocations = Locations;

        mTaxAdapter.clear();
        mTaxAdapter.addAll(mLocations);
        mTaxAdapter.notifyDataSetChanged();

        if(mLocations.isEmpty()){
            listLabel.setVisibility(View.VISIBLE);
        } else {
            listLabel.setVisibility(View.GONE);
        }
    }

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

        LocationObj aLocation = mLocations.get(position);
        Log.d(TAG, String.format("Clicked - %s", aLocation.toString()));

        mListener.onLocationSelected(aLocation);
    }

    public interface LocationListViewListener {

        void onLocationSelected(LocationObj LocationObj);

    }
}

Activity

onCreate

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

        setContentView(R.layout.free_tax_prep_providers_new);
        initDrawer();
        ButterKnife.bind(this);

        if (savedInstanceState != null) {
            //Restore the fragment's instance
            mLocationListViewFrag = (LocationListViewFrag)getSupportFragmentManager().getFragment(savedInstanceState, "mLocationListViewFrag");

        } else if (findViewById(R.id.fragment_container) != null) {
            // Check that the activity is using the layout version with
            // the fragment_container FrameLayout

            // Create a new Fragment to be placed in the activity layout
            mLocationListViewFrag = new LocationListViewFrag();

            // Add the fragment to the 'fragment_container' FrameLayout
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, mLocationListViewFrag).commit();

        }

    }

onSavedInstance

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        //Save the fragment's instance
        getSupportFragmentManager().putFragment(outState, "mLocationListViewFrag", mLocationListViewFrag);

    }

最佳答案

您实际上可以在 fragment 本身而不是 Activity 中重写 onSaveInstanceState。当我处理列表 fragment 时,这样做就完成了我的工作。

关于java - ListFragments 不会自动恢复数据集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35879211/

相关文章:

java - PowerMockito 在 Spring 3.2.4 中模拟静态测试 Controller

android - 如何在调用 popBackStack() 后将所选项目从 ListFragment 传递到上一个 Fragment?

android 在 TextView 末尾追加 '...'

android - 从 String 实例化一个 fragment ?

java - Esper:如何对温度过高做出即时 react ,并且每30秒快照一次?

JavaServlet : how to escape the pound character when setting response header?

java - Linux-Nimbus LookAndFeel : Table Grid Lines are not coming

android - 嵌套的 RecyclerView 不回收

java - 由于构造函数错误无法启动 ListView

android - 导航到Android中的另一个 fragment 后如何清除导航堆栈