我有一个包含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();
}
}
我希望有人能够提供帮助。
答案 0 :(得分:0)
覆盖片段中的onPause()
并致电
mListView.setItemChecked(position, false);
您还需要存储全局检查的项目的位置,以便您可以在onPause()
方法中访问该项目。