2014-01-11 3 views
3

У меня есть навигационный ящик в приложении для Android. но теперь я хочу изменить макет с помощью фрагментов, когда пользователь нажимает на любой элемент списка на панели навигации. Вот что у меня до сих пор:Android - фрагменты ящика для переноски

XML

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

    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:background="#000000" 
     android:layout_height="match_parent" >  
    </FrameLayout> 

    <ListView android:id="@+id/left_drawer" 
     android:layout_width="220dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 

Java Файл

public class MainActivity extends Activity { 
final String[] data ={"one","two","three"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); 

    final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout); 
    final ListView navList = (ListView) findViewById(R.id.left_drawer); 
    navList.setAdapter(adapter); 
    navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){ 
      drawer.setDrawerListener(new DrawerLayout.SimpleDrawerListener(){ 
       @Override 
       public void onDrawerClosed(View drawerView){ 
        super.onDrawerClosed(drawerView); 

       } 
      }); 
      drawer.closeDrawer(navList); 
     } 
    }); 
    } 
} 

Используя приведенный выше код, я осуществил навигации ящик в моем приложении, и я вижу, «один», «два» и «три» в навигационном ящике, но ничего не происходит, когда я нажимаю на них, за исключением того, что ящик закрывается. Итак, мой вопрос: Как добавить функциональность фрагмента к указанному выше коду?

Я новичок. Заранее спасибо!

+0

Вы должны сделать это с помощью FragmentActivity. – Kishan

+0

@kishandhamat почему это ?. – Raghunandan

+0

Это может помочь http://www.gadgetsaint.com/android/android-navigation-drawer-toolbar/#.WOBABBJ97fY – ASP

ответ

7

По щелчку есть

selectItem(pos); 

Тогда

public void selectItem(int position) 
{ 
    switch(position) 
    { 
      case 0: 
        // fragment1 
        // use fragment transaction and add the fragment to the container 
        FragmentManager fragmentManager = getFragmentManager() 
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
        Fragment1 fragment = new Fragment1(); 
        fragmentTransaction.add(R.id.content_frame, fragment); 
        fragmentTransaction.commit(); 

      break; 
      case 1: 
        // fragment2 
      break; 
      case 2: 
        // fragment2 
      break; 
    } 
} 
+0

Можете ли вы передать код вместо «// фрагмента»? –

+0

@ChinmayDabke см. Мое редактирование. – Raghunandan

+0

следует поставить «selectItem (pos)»; после "drawer.closeDrawer (navList);"? –

2

использование Это:

public class MenuFragmentActivity extends FragmentActivity{ 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.base_layout); 
    addFragments(new Sample(), false, false, 
      AndyConstants.CONTENT_PAGE); 
    } 

    public void addFragments(Fragment fragment, boolean animate, 
     boolean addToBackStack, String tag) { 

    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction ft = manager.beginTransaction(); 
    if (animate) { 
     ft.setCustomAnimations(R.anim.fragment_from_right, 
     R.anim.fragment_from_left, R.anim.fragment_from_right, 
     R.anim.fragment_from_left); 
    } 
    if (addToBackStack) { 
     ft.addToBackStack(tag); 
    } 
    ft.replace(R.id.content_frame, fragment); 
    ft.commit(); 
} 

}

Для фрагмента:

public class Sample extends Fragment { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
} 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
      View view = inflater.inflate(R.layout.page, container, false); 
     return view; 
    } 
    } 
+0

Не нужно расширять 'FragmentActivity'. Если вы поддерживаете навигационную панель ниже 11, вам необходимо использовать AppCompat. Необходимость расширения «ActionBarActivity» – Raghunandan

+0

В соответствии с вопросом это может легко сделать FragmentActivity. – Kishan

+0

его ящик для навигации. – Raghunandan

1

После генерации Navigation Drawer Activity по File->New->Activity->Navigation Drawer Activity, вот 3 шаги

Первый, перейдите к app_bar_main.xml затем

заменить

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

по

<FrameLayout 
     android:id="@+id/frame_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     /> 

Второй, перейдите MainActivity ->onNavigationItemSelected затем изменить его, как

public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    int id = item.getItemId(); 
    Fragment fragment = null; 
    if (id == R.id.nav_camera) { 
     fragment = CameraFragment.newInstance(); 
    } else if (id == R.id.nav_gallery) { 
     fragment = GalleryFragment.newInstance(); 
    } else if (id == R.id.nav_slideshow) { 
     fragment = SlideShowFragment.newInstance(); 
    } 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.frame_content, fragment).commit(); 

    setTitle(item.getTitle()); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

Наконец, создать Fragment класс, например фрагмент

public class CameraFragment extends Fragment{ 

    public static CameraFragment newInstance() { 
     Bundle args = new Bundle(); 
     CameraFragment fragment = new CameraFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
      @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_camera, null, false); 
     return rootView; 
    } 
} 

Demo project

enter image description here

Смежные вопросы