SlidingMenu突出显示所选项目

时间:2013-11-11 09:59:13

标签: android android-listview slidingmenu

我正在使用thisSliding Menu,但I'm not using ActionBarSherlock

所以我的 SlidingMenu 是一个填充了ArrayAdapter ListFragment ,如果我单击菜单ListView中的项目,则会启动一个新的活动。

我的问题是如何突出显示ListView中当前所选的项目?

public class MenuListFragment extends ListFragment {

    public MenuListFragment(){
    }

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

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);


        SampleAdapter adapter = new SampleAdapter(getActivity());

        adapter.add(new MenuItem(0, "Tout voir", R.drawable.ic_launcher));
        adapter.add(new MenuItem(1, "A", R.drawable.ic_a));
        adapter.add(new MenuItem(2, "B", R.drawable.ic_b));
        adapter.add(new MenuItem(3, "C", R.drawable.ic_c));
        adapter.add(new MenuItem(4, "D", R.drawable.ic_d));
        adapter.add(new MenuItem(5, "E", R.drawable.ic_e));
        adapter.add(new MenuItem(6, "F", R.drawable.ic_f));
        adapter.add(new MenuItem(7, "G", R.drawable.ic_g));
        adapter.add(new MenuItem(8, "H", R.drawable.ic_h));
        adapter.add(new MenuItem(9, "I", R.drawable.ic_i));
        adapter.add(new MenuItem(10, "J", R.drawable.ic_j));
        adapter.add(new MenuItem(11, "K", R.drawable.ic_k));
        adapter.add(new MenuItem(12, "L", R.drawable.ic_l));

        setListAdapter(adapter);
    }

    private class MenuItem {
        public int id;
        public String tag;
        public int iconRes;
        //public boolean disableIcon = false;

        public MenuItem(int id, String tag, int iconRes) {
            this.id = id;
            this.tag = tag; 
            this.iconRes = iconRes;
        }

        /*public MenuItem(int id, String tag) {
            this.id = id;
            this.tag = tag; 
            this.disableIcon = true;
        }*/
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id){
        int idItem = ((MenuItem) l.getItemAtPosition(position)).id;


        Intent intent = new Intent(getActivity(), MainActivity.class);
        intent.putExtra("id_signe", idItem);
        startActivity(intent);
    }   

    public class SampleAdapter extends ArrayAdapter<MenuItem> {

        public SampleAdapter(Context context) {
            super(context, 0);
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            MenuItem mi = getItem(position);

            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null);
            }

            ImageView icon = (ImageView) convertView.findViewById(R.id.row_icon);
            icon.setImageResource(mi.iconRes);

            TextView title = (TextView) convertView.findViewById(R.id.row_title);
            title.setText(mi.tag);

            return convertView;
        }

    }
}


public class BaseActivity extends SlidingFragmentActivity {
    private int mTitleRes;
    protected ListFragment mFrag;

    public BaseActivity(int titleRes) {
        mTitleRes = titleRes;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle(mTitleRes);

        // set the Behind View
        setBehindContentView(R.layout.menu_frame);
        if (savedInstanceState == null) {
            FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
            mFrag = new MenuListFragment();
            t.replace(R.id.menu_frame, mFrag);
            t.commit();
        } else {
            mFrag = (ListFragment) this.getSupportFragmentManager().findFragmentById(R.id.menu_frame);
        }

        // customize the SlidingMenu
        SlidingMenu slidingMenu = getSlidingMenu();
        slidingMenu.setMode(SlidingMenu.LEFT);
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        slidingMenu.setShadowWidthRes(R.dimen.slidingmenu_shadow_width);
        slidingMenu.setShadowDrawable(R.drawable.slidingmenu_shadow);
        slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        slidingMenu.setFadeDegree(0.35f);

        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case android.R.id.home:
                    toggle();
                    return true;
            }
            return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

由于

编辑1:

这是我的menu_list.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@color/red" android:state_pressed="true"/>
   <item android:drawable="@color/red" android:state_selected="true"/>
   <item android:drawable="@color/red" android:state_activated="true"/>
</selector>

我的slidingmenu_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@color/red" android:state_pressed="true"/>
   <item android:drawable="@color/red" android:state_selected="true"/>
   <item android:drawable="@color/red" android:state_activated="true"/>
</selector>

我的列表视图的行会突出显示,但只有当我按下时,才会释放背景颜色。

2 个答案:

答案 0 :(得分:0)

检查selected answer ....

在列表项目布局定义中使用以下列表... 定义是静态的,因此在实现“OnClick()”

时不需要
android:background="?android:attr/activatedBackgroundIndicator"

答案 1 :(得分:0)

@Override
public void onListItemClick(ListView listview, View view, int position, long id) {

    for(int i=0;i<adapter.getCount();i++){
        LinearLayout slidingmenurow = (LinearLayout) listview.getChildAt(i).findViewById(R.id.slidingmenurow);
        slidingmenurow.setBackgroundResource(R.color.slingmenu_list_background);
    }
    View convertViewSelected = adapter.getView(position, view, listview);
    LinearLayout slidingmenurowSelected = (LinearLayout)convertViewSelected.findViewById(R.id.slidingmenurow);
    slidingmenurowSelected.setBackgroundResource(R.color.slingmenu_list_press);

    super.onListItemClick(listview, view, position, id);
}