如何防止Fragment中的ListView存储所选项并突出显示它?

时间:2015-05-20 11:19:05

标签: android listview android-fragments

我有一个包含ListView的片段,用户可以在其中选择一个项目(单选)。所选的一个通过颜色突出显示。当用另一个片段替换片段并再次将其取回时,仍然会选择该项目,尽管会调用onAttach()... onViewCreated方法上的片段。

如何阻止我的应用执行此操作?当我显示包含列表视图的片段时,我想总是有一个新的未选择的列表。

这是我的代码:

public class ServerListFragment extends Fragment {

    //////////////////////////
    // CONSTANTS
    //////////////////////////

    private static final String TAG = ServerListFragment.class.getName();

    //////////////////////////
    // PRIVATE VARIABLES
    //////////////////////////

    private ServerListFragmentCallbacks mCallback;
    private Button mNextButton;
    private ListView mListView;

    //////////////////////////
    // CONSTRUCTOR
    //////////////////////////

    public ServerListFragment() {
    }

    //////////////////////////
    // LIFECYCLE
    //////////////////////////

    // 1 ON ATTACH
    @Override
    public void onAttach(Activity activity) {
        Log.i(TAG, "onAttach()");
        super.onAttach(activity);
        // set up callback reference
        try {
            mCallback = (ServerListFragmentCallbacks) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException("Activity must implement ServerListFragmentCallbacks.");
        }
    }

    // 2 ON CREATE
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.i(TAG, "onCreateView()");
        View v = inflater.inflate(R.layout.fragment_server_list, container, false);

        return v;
    }

    // 3 ON CREATE VIEW
    // 4 ON ACTIVITY CREATED
    // 5 ON START
    // 6 ON RESUME
    // 7 ON PAUSE
    // 8 ON STOP
    // 9 ON DESTROY VIEW
    // 10 ON DESTROY

    // 11 ON DETACH
    @Override
    public void onDetach() {
        Log.i(TAG, "onDetach()");
        super.onDetach();
    }

    //////////////////////////
    // OVERRIDE METHODS
    //////////////////////////

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        Log.i(TAG, "onViewCreated()");
        super.onViewCreated(view, savedInstanceState);

        // next button
        mNextButton = (Button) view.findViewById(R.id.server_list_next_button);
        mNextButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mCallback.onServerListFragmentNextButtonClick();
            }

        });

        // list view containing servers
        mListView = (ListView) view.findViewById(R.id.server_list_view);

        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                mListView.setSelection(position);
                mListView.setItemChecked(position, true);
                mNextButton.setEnabled(true);
            }

        });

        mListView.setAdapter(new ServerListAdapter(getActivity(), DummyData.getServerList()));

    }

    //////////////////////////
    // CALLBACK INTERFACE
    //////////////////////////

    public interface ServerListFragmentCallbacks{
        public void onServerListFragmentNextButtonClick();
    }

}

我希望有人能够提供帮助。

1 个答案:

答案 0 :(得分:0)

覆盖片段中的onPause()并致电

 mListView.setItemChecked(position, false);

您还需要存储全局检查的项目的位置,以便您可以在onPause()方法中访问该项目。