현재 navigation drawer을 구현하면서 drawer는 fragment 화면으로 listview를 만들고있습니다.
현재 다른 홈페이지와 example을 참고해가면서 거의다 완성되었는데요.
리스트뷰 메뉴에서 아이템 클릭시 선택된 상태로 보여줬으면 해서 setitemchecked(position, true)로 설정했는데
전혀 안먹히네요. 해결법좀알수있을까요?
listview는 baseadapter 로 커스텀리스트뷰를 만들었고요 choicemode는 singlechoice로 했습니다.
코드추가
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:background="#ffffff"
android:divider="@null"
tools:context="com.*.*.NavigationDrawerFragment">
</ListView>
public class NavigationDrawerAdapter extends BaseAdapter {
private Context context;
private ArrayList<NavigationDrawerItem> items;
private LayoutInflater inflater;
private int layout;
public NavigationDrawerAdapter(Context context, ArrayList<NavigationDrawerItem> items, int layout){
this.context = context;
this.items = items;
this.layout = layout;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public class ViewHolder{
ImageView icon;
TextView content;
}
@Override
public View getView(int position, View cView, ViewGroup parent) {
ViewHolder holder = null;
if(cView == null){
cView = inflater.inflate(layout, parent, false);
holder = new ViewHolder();
cView = inflater.inflate(layout,null);
holder.icon = (ImageView)cView.findViewById(R.id.icon);
holder.content = (TextView)cView.findViewById(R.id.content);
cView.setTag(holder);
} else {
holder = (ViewHolder)cView.getTag();
}
holder.icon.setImageResource(items.get(position).getIcon());
holder.content.setText(items.get(position).getContent());
return cView;
}
}
public class NavigationDrawerFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";
private NavigationDrawerCallbacks mCallbacks;
private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
private ListView mDrawerListView;
private View mFragmentContainerView;
private ArrayList<NavigationDrawerItem> items;
private int mCurrentSelectedPosition = 0;
private boolean mFromSavedInstanceState;
private boolean mUserLearnedDrawer;
private void selectItem(int position){
mCurrentSelectedPosition = position;
if (mDrawerListView != null) {
mDrawerListView.setItemChecked(position, true);
}
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
if (mCallbacks != null) {
mCallbacks.onNavigationDrawerItemSelected(position);
}
}
public void setUp(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar){
mFragmentContainerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.open_drawer,R.string.close_drawer){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if(!isAdded()){
return;
}
getActivity().supportInvalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if(!isAdded()){
return;
}
getActivity().supportInvalidateOptionsMenu();
}
};
mDrawerToggle.setDrawerIndicatorEnabled(true);
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
private void addNavList(int icon, String content){
items.add(new NavigationDrawerItem(icon, content));
}
public ActionBarDrawerToggle getDrawerToggle(){
return mDrawerToggle;
}
public NavigationDrawerFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Read in the flag indicating whether or not the user has demonstrated awareness of the
// drawer. See PREF_USER_LEARNED_DRAWER for details.
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);
if (savedInstanceState != null) {
mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
mFromSavedInstanceState = true;
}
// Select either the default item (0) or the last selected item.
selectItem(mCurrentSelectedPosition);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mDrawerListView = (ListView)inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
items = new ArrayList<NavigationDrawerItem>();
mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
});
addNavList(R.mipmap.ic_launcher, "***");
addNavList(R.mipmap.ic_launcher, "***");
addNavList(R.mipmap.ic_launcher, "***");
addNavList(R.mipmap.ic_launcher, "***");
mDrawerListView.setAdapter(new NavigationDrawerAdapter(getActivity(), items, R.layout.item_drawer));
mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
return mDrawerListView;
}