2017-02-28 30 views
1

我没有使用标准的抽屉,从机器人工作室,但我使用SlidingPanelLayout创建抽屉(,我从这个教程https://nganthony.github.io/2016/01/24/implementing-android-mini-navigation-drawer.html我怎样才能让抽屉菜单链接到其他片段Android Studio中

我的抽屉工作得很好,但我无法弄清楚如何才能让按钮链接到另一个片段

我用这个方法来调用片段标准抽屉

if (id == R.id.nav_sms) { 
      SMSFragment smsFragment = new SMSFragment(); 
      FragmentManager manager = getSupportFragmentManager(); 
      manager.beginTransaction().replace(
        R.id.layout_main, 
        smsFragment, 
        smsFragment.getTag() 
      ).commit(); 

我的项目文件

MainActivity.java

package com.th.ac.sd; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.ng.anthony.mininavigationdrawer.R; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

MasterFragment.java

package com.th.ac.sd; 

import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.ng.anthony.mininavigationdrawer.R; 

/** 
* Created by Anthony on 16-01-25. 
*/ 
public class MasterFragment extends ListFragment { 

    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_master, container); 

     setListAdapter(new MenuListAdapter(R.layout.row_menu_action_item, getActivity(), MenuActionItem.values())); 
     return view; 
    } 
} 

MenuActionItem.java

package com.th.ac.sd; 

/** 
* Created by Anthony on 16-01-25. 
*/ 
public enum MenuActionItem { 
    ITEM1, 
    ITEM2, 
    ITEM3, 
    ITEM4, 
    ITEM5 
} 

MenuListAdapter.java

package com.th.ac.sd; 

import android.app.Activity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.ng.anthony.mininavigationdrawer.R; 

/** 
* Created by Anthony on 16-01-25. 
*/ 
public class MenuListAdapter extends ArrayAdapter<MenuActionItem> { 

    int resource; 
    Activity activity; 

    public MenuListAdapter(int resource, Activity activity, MenuActionItem[] items) { 
     super(activity, resource, items); 

     this.resource = resource; 
     this.activity = activity; 
    } 

    public View getView (int position, View convertView, ViewGroup parent) { 
     View rowView = convertView; 

     if(rowView == null) { 
      rowView = activity.getLayoutInflater().inflate(resource, null); 

      MenuItemViewHolder viewHolder = new MenuItemViewHolder(); 

      viewHolder.menuItemImageView = (ImageView)rowView.findViewById(R.id.menu_item_image_view); 
      viewHolder.menuItemTextView = (TextView)rowView.findViewById(R.id.menu_item_text_view); 

      rowView.setTag(viewHolder); 
     } 

     MenuItemViewHolder holder = (MenuItemViewHolder)rowView.getTag(); 

     if(position == MenuActionItem.ITEM1.ordinal()) { 
      holder.menuItemImageView.setImageDrawable(activity.getDrawable(R.drawable.ic_megaphone)); 
      holder.menuItemTextView.setText(activity.getResources().getString(R.string.item1)); 
     } 
     else if(position == MenuActionItem.ITEM2.ordinal()) { 
      holder.menuItemImageView.setImageDrawable(activity.getDrawable(R.drawable.ic_calendar_page_empty)); 
      holder.menuItemTextView.setText(activity.getResources().getString(R.string.item2)); 
     } 
     else if(position == MenuActionItem.ITEM3.ordinal()) { 
      holder.menuItemImageView.setImageDrawable(activity.getDrawable(R.drawable.ic_chat_bubbles)); 
      holder.menuItemTextView.setText(activity.getResources().getString(R.string.item3)); 
     } 
     else if(position == MenuActionItem.ITEM4.ordinal()) { 
      holder.menuItemImageView.setImageDrawable(activity.getDrawable(R.drawable.ic_college_graduation)); 
      holder.menuItemTextView.setText(activity.getResources().getString(R.string.item4)); 
     } 
     else if(position == MenuActionItem.ITEM5.ordinal()) { 
      holder.menuItemImageView.setImageDrawable(activity.getDrawable(R.drawable.ic_trophy)); 
      holder.menuItemTextView.setText(activity.getResources().getString(R.string.item5)); 
     } 

     return rowView; 
    } 

    private static class MenuItemViewHolder { 
     public ImageView menuItemImageView; 
     public TextView menuItemTextView; 
    } 
} 

SNewsFragment.java(该片段的一个我想链接到)

package com.th.ac.sd; 


import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.ng.anthony.mininavigationdrawer.R; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class SNewsFragment extends Fragment { 


    public SNewsFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_snews, container, false); 
    } 

} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:fitsSystemWindows="true" 
    tools:context="com.th.ac.sd.MainActivity"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

    <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" 
     android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar android:id="@+id/toolbar" 
      android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_main" /> 

    </LinearLayout> 

    <android.support.design.widget.FloatingActionButton android:id="@+id/fab" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_dialog_email" /> 

</android.support.design.widget.CoordinatorLayout> 

content_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SlidingPaneLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:id="@+id/layout_main"> 

    <!--Master fragment--> 
    <fragment 
     android:name="com.th.ac.sd.MasterFragment" 
     android:layout_width="220dp" 
     android:layout_height="match_parent" 
     android:id="@+id/fragment_master"> 
    </fragment> 

    <!--Detail layout --> 
    <FrameLayout 
     android:layout_width="1000dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:layout_marginLeft="56dp"> 
    </FrameLayout> 
</android.support.v4.widget.SlidingPaneLayout> 

fragment_master.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/darker_gray" 
     android:divider="@null"> 
    </ListView> 

</LinearLayout> 

fragment_snews.xml(我想链接到片段中的一个)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.th.ac.sd.SNewsFragment"> 

    <!-- TODO: Update blank fragment layout --> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_blank_fragment" /> 

</FrameLayout> 

row_menu_action_item。 xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="16dp" 
    android:gravity="center_vertical"> 

    <ImageView 
     android:id="@+id/menu_item_image_view" 
     android:layout_width="24dp" 
     android:layout_height="24dp" 
     android:layout_marginRight="16dp"/> 

    <TextView 
     android:id="@+id/menu_item_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="16sp" 
     android:textColor="@android:color/white"/> 

</LinearLayout> 

我不知道我应该给这些文件,所以我把所有的文件在我的项目从ListFragmentMasterFragment.java对不起

+0

*我的抽屉工作正常,但我不知道如何使按钮链接到另一个片段*哪一个,fab? –

+0

从MasterFragment.java上的ListFragment覆盖onListItemClick –

回答

1

覆盖onListItemClick()方法。像

public class MasterFragment extends ListFragment { 

    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_master, container); 

     setListAdapter(new MenuListAdapter(R.layout.row_menu_action_item, getActivity(), MenuActionItem.values())); 
     return view; 
    } 

@Override 
     public void onListItemClick(ListView l, View v, int position, long id) { 
      super.onListItemClick(l, v, position, id); 

      if(position == 0){ 
       SMSFragment smsFragment = new SMSFragment(); 
       FragmentManager manager = getSupportFragmentManager(); 
       manager.beginTransaction().replace(
         R.id.layout_main, 
         smsFragment, 
         smsFragment.getTag() 
       ).commit(); 
      } 
     } 
}