2016-10-24 109 views
0

我是一個帶抽屜的初學者。 我採取了可用的星球上的例子https://developer.android.com/training/implementing-navigation/nav-drawer.html我的抽屜有兩個問題:1.抽屜不滾動2.抽屜沒有通過滑動關閉

我開始更新它爲我的應用程序。

我的問題是,listview不滾動。我認爲這是默認的列表視圖滾動,你不必通過scrollview環繞。也許我有我的佈局問題:

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- As the main content view, the view below consumes the entire 
     space available using match_parent in both dimensions. --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <!-- android:layout_gravity="start" tells DrawerLayout to treat 
     this as a sliding drawer on the left side for left-to-right 
     languages and on the right side for right-to-left languages. 
     The drawer is given a fixed width in dp and extends the full height of 
     the container. A solid background is used for contrast 
     with the content view. --> 
    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 

    <Button 
     android:id="@+id/db" 
     android:text="Databse" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

    <ListView 
     android:id="@+id/listViewPeople" 
     android:layout_height="120dp" 
     android:layout_below="@id/db" 
     android:layout_width="match_parent"/> 

    <Button 
     android:id="@+id/disc" 
     android:text="Discovery" 
     android:layout_marginTop="10dp" 
     android:layout_below="@id/listViewPeople" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@+id/state" 
     android:text="state" 
     android:layout_below="@id/disc" 
     android:layout_height="30dp" 
     android:layout_width="match_parent"/> 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/state" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 
     <TextView 
      android:id="@+id/emails" 
      android:layout_marginTop="20dp" 
      android:text="12345" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent"/> 
    </ScrollView> 

</RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

而且我的strings.xml樣子:

<resources> 
    <string name="app_name">CheckSecurity</string> 
    <string name="yes">Yes</string> 
    <string name="no">No</string> 

    <string name="action_settings">Settings</string> 

    <string-array name="planets_array"> 
     <item>Mercury</item> 
     <item>Venus</item> 
     <item>Earth</item> 
     <item>Mars</item> 
     <item>Jupiter</item> 
     <item>Saturn</item> 
     <item>Uranus</item> 
     <item>Neptune</item> 
     <item>1</item> 
     <item>2</item> 
     <item>3</item> 
     <item>4</item> 
     <item>5</item> 
     <item>6</item> 
     <item>7</item> 
     <item>8</item> 
     <item>9</item> 
     <item>10</item> 
    </string-array> 


    <string name="drawer_open">Open navigation drawer</string> 
    <string name="drawer_close">Close navigation drawer</string> 
    <string name="action_websearch">Web search</string> 
    <string name="app_not_available">Sorry, there\'s no web browser available</string> 

</resources> 

第二個問題是抽屜只能由巴反按鈕關閉。如果我向後滑動抽屜,它不會關閉。如果我選擇抽屜正常關閉的項目。不是簡單的滑動。我不能在代碼中管理它?

我用android.support.v7:

import android.os.Build; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 

enter image description here

這裏是我的代碼:

private void initiateDrawer() { 
    mTitle = mDrawerTitle = getTitle(); 
    mPlanetTitles = getResources().getStringArray(array.planets_array); 
    mDrawerLayout = (DrawerLayout) findViewById(id.drawer_layout); 
    mDrawerList = (ListView) findViewById(id.left_drawer); 

    // set a custom shadow that overlays the main content when the drawer opens 
// mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    // set up the drawer's list view with items and click listener 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
      layout.drawer_list_item, mPlanetTitles)); 
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 
    // enable ActionBar app icon to behave as action to toggle nav drawer 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 

    // ActionBarDrawerToggle ties together the the proper interactions 
    // between the sliding drawer and the action bar app icon 

    mDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      mDrawerLayout,   /* DrawerLayout object */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_close /* "close drawer" description for accessibility */ 
    ) { 
     public void onDrawerClosed(View view) { 
      getSupportActionBar().setTitle(mTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 

     public void onDrawerOpened(View drawerView) { 
      getSupportActionBar().setTitle(mDrawerTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    }; 
    mDrawerLayout.addDrawerListener(mDrawerToggle); 

    // if (savedInstanceState == null) { 
    //  selectItem(0); 
    // } 
} 

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

/* Called whenever we call invalidateOptionsMenu() */ 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    // If the nav drawer is open, hide action items related to the content view 
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
    menu.findItem(id.action_websearch).setVisible(!drawerOpen); 
    return super.onPrepareOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // The action bar home/up action should open or close the drawer. 
    // ActionBarDrawerToggle will take care of this. 
    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    // Handle action buttons 
    switch(item.getItemId()) { 
     case id.action_websearch: 
      // create intent to perform web search for this planet 
      Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); 
      intent.putExtra(SearchManager.QUERY, getSupportActionBar().getTitle()); 
      // catch event that there's no activity to handle intent 
      if (intent.resolveActivity(getPackageManager()) != null) { 
       startActivity(intent); 
      } else { 
       Toast.makeText(this, string.app_not_available, Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

/* The click listner for ListView in the navigation drawer */ 
private class DrawerItemClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     selectItem(position); 
    } 
} 

private void selectItem(int position) { 
    // update the main content by replacing fragments 
    Fragment fragment = new PlanetFragment(); 
    Bundle args = new Bundle(); 
    args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position); 
    fragment.setArguments(args); 

    FragmentManager fragmentManager = getFragmentManager(); 
    fragmentManager.beginTransaction().replace(id.content_frame, fragment).commit(); 

    // update selected item and title, then close the drawer 
    mDrawerList.setItemChecked(position, true); 
    setTitle(mPlanetTitles[position]); 
    mDrawerLayout.closeDrawer(mDrawerList); 
} 

@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    getSupportActionBar().setTitle(mTitle); 
} 

/** 
* When using the ActionBarDrawerToggle, you must call it during 
* onPostCreate() and onConfigurationChanged()... 
*/ 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Pass any configuration change to the drawer toggls 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

/** 
* Fragment that appears in the "content_frame", shows a planet 
*/ 
public static class PlanetFragment extends Fragment { 
    public static final String ARG_PLANET_NUMBER = "planet_number"; 

    public PlanetFragment() { 
     // Empty constructor required for fragment subclasses 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(layout.fragment_planet, container, false); 
     int i = getArguments().getInt(ARG_PLANET_NUMBER); 
     String planet = getResources().getStringArray(array.planets_array)[i]; 

     int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()), 
       "drawable", getActivity().getPackageName()); 
     ((ImageView) rootView.findViewById(id.image)).setImageResource(imageId); 
     getActivity().setTitle(planet); 
     return rootView; 
    } 
} 


private void initFindViewbyID(){ 
    listeViewWifi = (ListView) findViewById(id.listViewWifi); 
    scan = (Button) findViewById(id.scan); 
    discovery = (Button) findViewById(id.disc); 
    hosts = (TextView) findViewById(id.hosts); 
    wifistate = (TextView) findViewById(id.wifistate); 
} 

回答