当前位置: 代码迷 >> Android >> 左侧抽屉的实现有关问题
  详细解决方案

左侧抽屉的实现有关问题

热度:67   发布时间:2016-04-28 01:15:14.0
左侧抽屉的实现问题
本帖最后由 dcxy0 于 2015-04-25 15:16:42 编辑
想要实现的效果(抽屉上的listview上面每个项都有一个图标)



下面是我的布局文件(目前还不知道怎么加载另外的布局文件,所以左侧抽屉和中间部分的布局都在一个文件)


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                 >
    <android.support.v4.widget.DrawerLayout
            android:id="@+id/drawer_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        <!-- The main content view -->
        <FrameLayout
                android:id="@+id/content_frame"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >
            <ListView
                    android:id="@+id/show"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    />
            <ImageView
                    android:id="@+id/bimg"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    />
            <TextView
                    android:id="@+id/shuosha"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    />
        </FrameLayout>
        <!-- The navigation drawer         -->
        <ListView
                android:id="@+id/left_drawer"
                android:layout_width="240dp"
                android:layout_height="match_parent"
                android:layout_gravity="start"
                android:background="#111"
                android:choiceMode="singleChoice"
                android:divider="@android:color/transparent"
                android:dividerHeight="0dp" />
    </android.support.v4.widget.DrawerLayout>


</RelativeLayout>


下面是Activity文件(参照了一些网上的例子):



import android.app.Activity;
import android.app.ListActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.*;
import android.widget.*;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;

import android.support.v4.widget.DrawerLayout;

public class MainActivity extends ListActivity {

    /*初始化菜单*/
    private static final String TOULE ="偷乐";
    private static final String YANFU="眼福";
    private static final String SHUOSHA ="说啥";
    /**/

    private ListView show;//show qiubai.
    private ImageView bimg;//show bing image.
    private ListView vlist ;//list view

    //private ActionBarDrawerToggle mDrawerToggle;
    private Bitmap bingisources;//bing image sources.
    private List<String> qsbkshow = new ArrayList<String>();

    //private List <String> arrayToList = new ArrayList<String>(Arrays.asList(new String[]{"偷乐","眼福"}));

    private DrawerLayout mDrawerLayout = null;
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 0x123) {
                if (bimg.getVisibility() == View.VISIBLE) {
                    bimg.setVisibility(View.INVISIBLE);
                }
                show.setVisibility(View.VISIBLE);
                show.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.listcustom, qsbkshow));
            } else if (msg.what == 0x124) {
                if (show.getVisibility() == View.VISIBLE) {
                    show.setVisibility(View.INVISIBLE);
                }
                bimg.setVisibility(View.VISIBLE);
                bimg.setImageBitmap(bingisources);
            }
            mDrawerLayout.setVisibility(View.INVISIBLE);
        }
    };


    /**
     * 获取左侧菜单的listView.
     *
     *
     * @return
     */
    private List<Map<String, Object>> getData(){
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put(TOULE,R.drawable.toule);
        map.put(YANFU,R.drawable.yanfu);
        map.put(SHUOSHA,R.drawable.guanyu);
        list.add(map);
        return list;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case R.id.leftmenu:
                if(mDrawerLayout.getVisibility()==View.VISIBLE){
                    //vlist.setVisibility(View.INVISIBLE);
                }else{
                    mDrawerLayout.setVisibility(View.VISIBLE);
                    mDrawerLayout.openDrawer(Gravity.LEFT);
                }
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }


    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // If the nav drawer is open, hide action items related to the content view
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(vlist);
        menu.findItem(R.id.leftmenu).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_activity_actions,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setContentView(R.layout.main);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        show = (ListView) findViewById(R.id.show);
        bimg = (ImageView) findViewById(R.id.bimg);
        vlist= (ListView) findViewById(R.id.left_drawer);
        setListAdapter(new SimpleAdapter(MainActivity.this, getData(), android.R.layout.simple_list_item_2, new String[]{"img_pre", "text"}, new
                int[]{R.id.img_pre, R.id.text}));
        vlist = getListView();
        vlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if ((getData().get(0)).get(position).equals(TOULE)) {
                    class getNet implements Runnable {
                        @Override
                        public void run() {
                            getqs();
                        }
                    }
                    new Thread(new getNet()).start();
                }else if ((getData().get(0)).get(position).equals(YANFU)) {
                    class getBingimages implements Runnable {
                        @Override
                        public void run() {
                            try {
                                getbimsa();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    new Thread(new getBingimages()).start();
                }else if ((getData().get(0)).get(position).equals(SHUOSHA)) {
                    TextView tv = (TextView) findViewById(R.id.shuosha);
                    Toast.makeText(MainActivity.this,"说啥,现在看到了把??哈哈",Toast.LENGTH_LONG);
                    tv.setText("暂时不说.");
                }
            }
        });
    }
}




在线等大神......
------解决思路----------------------
推荐使用github上的抽屉框架
https://github.com/ikimuhendis/LDrawer
  相关解决方案