簡體   English   中英

如何防止我的ListView在Fragment內存儲所選項目並突出顯示?

[英]How to prevent my ListView inside a Fragment to store the selected item and highlight it?

我有一個片段,其中包含一個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();
    }

}

我希望有人能夠提供幫助。

覆蓋片段中的onPause()並調用

 mListView.setItemChecked(position, false);

您還需要存儲全局檢查的項目的位置,以便可以在onPause()方法中訪問該位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM