【问题标题】:SlidingMenu cannot highlight selected itemSlidingMenu 无法突出显示所选项目
【发布时间】:2014-06-15 19:32:04
【问题描述】:

我正在使用适用于 Android 的 SlidingMenu,并且我有一个像这样的“菜单片段”:

public class MenuListFragment extends ListFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.list, null);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        String[] items = getResources().getStringArray(R.array.menu);
        ArrayAdapter<String> colorAdapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, items);
        setListAdapter(colorAdapter);
        getListView().setSelector(R.drawable.menu_selector);
    }

    @Override
    public void onListItemClick(ListView lv, View v, int position, long id) {
        Fragment newContent = null;
        switch (position) {
            case 0:
                etc...
        }
        if (newContent != null)
            switchFragment(newContent);
        v.setSelected(true);
        lv.setSelected(true);
    }

    private void switchFragment(Fragment fragment) {
        if (getActivity() == null)
            return;

        MainActivity activity = (MainActivity) getActivity();
        activity.switchContent(fragment);
    }
}

选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:exitFadeDuration="@android:integer/config_mediumAnimTime">

    <!--<item android:drawable="@android:color/transparent" android:state_pressed="true"/>-->
    <item android:drawable="@color/white" android:state_selected="true"/>
    <!--<item android:drawable="@color/red" android:state_activated="true"/>-->
    <item android:drawable="@color/black" />

</selector>

和列表布局:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/list_padding"
    android:paddingRight="@dimen/list_padding"
    android:choiceMode="singleChoice"/>

单击菜单中的一项后,菜单将被隐藏(如预期的那样)。但是当菜单再次显示时,没有更多的选择项。

有没有办法让项目保持选中状态?

更新

根据 Shereef Marzouk 的建议,我改变了:

public class MenuListFragment extends ListFragment {

    private View selectedView;

    ...

    @Override
    public void onListItemClick(ListView lv, View v, int position, long id) {
        Fragment newContent = null;
        switch (position) {
            // stuff
        }
        if (selectedView != null) selectedView.setBackgroundColor(getResources().getColor(R.color.aqincolor));
        v.setBackgroundColor(getResources().getColor(R.color.espresso));
        selectedView = v;
        if (newContent != null)
            switchFragment(newContent);
    }

    ...
}

在这种情况下它可以工作,但我不明白有一个 menu_selector.xml 甚至调用 super.onActivityCreated(savedInstanceState); 也不会切换

【问题讨论】:

  • “在这种情况下它可以工作,但我不明白有 menu_selector.xml”,菜单选择器可以帮助您创建反馈效果(触地效果),但菜单是触摸菜单项后显示的菜单与用户触摸的菜单完全不同,它们没有链接,而且它们对您加载的活动一无所知,这就是为什么您必须手动更改颜色的原因,至少这个是我的理解,我可能是错的。

标签: android slidingmenu


【解决方案1】:

这是我在我的应用程序中所做的:

final Class<?> currentClass = getActivity.getClass();
        switch (position) {
          case 0: //Menu
            cls = MainNavigationActivity.class;
            if (currentClass.equals(cls)) {
              view.setBackgroundColor(parent.getContext().getResources().getColor(R.color.selectedMenuBackground));
            }
            break;
        }

当菜单初始化时,检查你初始化了哪个类,并根据它改变 BG 颜色

【讨论】:

  • 感谢您的回复。请看我的回答我还有疑问。
  • 谢谢。我不知道这是否是正确的方法,但这是唯一对我有用的解决方案
  • P.S.我在滑动菜单的列表适配器的getView()中使用过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多