2014-01-24 2 views
0

Я пытаюсь реализовать блок навигации, это мой код, и во время запуска приложения я получаю сообщение об ошибке.Передвижной ящик Ошибка при замене метода при замене фрагментов в событии onclick

это ошибка в проблемах затмения.

Описание Путь информационного ресурса Тип Метод замены (INT, фрагмент) в типе FragmentTransaction не применяется для аргументов (INT, фрагмент) MainActivity.java/NavigationDrawer/SRC/COM/например/navigationdrawer линии 198 Java Проблема ,

Это мой код основной деятельности

package com.example.testnav; 

    import android.os.Bundle; 
    import android.app.Activity; 
    import android.app.Fragment; 
    import android.app.FragmentManager; 
    import android.content.res.Configuration; 
    import android.support.v4.app.ActionBarDrawerToggle; 

    import android.support.v4.view.GravityCompat; 
    import android.support.v4.widget.DrawerLayout; 
    import android.util.Log; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.ArrayAdapter; 
    import android.widget.ListView; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class MainActivity extends Activity { 

    private String[] drawerListViewItems; 
    private DrawerLayout drawerLayout; 
    private ListView drawerListView; 
    private ActionBarDrawerToggle actionBarDrawerToggle; 

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

     // get list items from strings.xml 
     drawerListViewItems = getResources().getStringArray(R.array.items); 
     // get ListView defined in activity_main.xml 
     drawerListView = (ListView) findViewById(R.id.left_drawer); 

     // Set the adapter for the list view 
     drawerListView.setAdapter(new ArrayAdapter<String>(this, 
       R.layout.drawer_listview_item, drawerListViewItems)); 

     // 2. App Icon 
     drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

     // 2.1 create ActionBarDrawerToggle 
     actionBarDrawerToggle = new ActionBarDrawerToggle(
       this,     /* host Activity */ 
       drawerLayout,   /* DrawerLayout object */ 
       R.drawable.ic_launcher, /* nav drawer icon to replace 'Up' caret */ 
       R.string.drawer_open, /* "open drawer" description */ 
       R.string.drawer_close /* "close drawer" description */ 
       ); 

     // 2.2 Set actionBarDrawerToggle as the DrawerListener 
     drawerLayout.setDrawerListener(actionBarDrawerToggle); 

     // 2.3 enable and show "up" arrow 
     getActionBar().setDisplayHomeAsUpEnabled(true); 

     // just styling option 
     drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

     drawerListView.setOnItemClickListener(new DrawerItemClickListener()); 
    } 

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

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     actionBarDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     // call ActionBarDrawerToggle.onOptionsItemSelected(), if it returns true 
     // then it has handled the app icon touch event 

     if (actionBarDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 





    private class DrawerItemClickListener implements ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView parent, View view, int position, long id) { 
      // Toast.makeText(MainActivity.this, ((TextView)view).getText(), Toast.LENGTH_LONG).show(); 


      displayView(position); 
      drawerLayout.closeDrawer(drawerListView); 

     } 
    } 


    private void displayView(int position) {  

     Fragment fragment = null; 
     switch (position) { 
     case 0: 
      fragment = new FragmentOne(); 
      break; 
     case 1: 
      fragment = new FragmentTwo(); 
      break; 
     case 2: 
      fragment = new FragmentThree(); 
      break; 
     case 3: 
      fragment = new FragmentOne(); 
      break; 
     case 4: 
      fragment = new FragmentOne(); 
      break; 
     case 5: 
      fragment = new FragmentOne(); 
      break; 

     default: 
      break; 
     } 

     if (fragment != null) { 
      FragmentManager fragmentManager = getFragmentManager(); 
      fragmentManager.beginTransaction() 
        .replace(R.id.content_frame, fragment).commit(); 

      // update selected item and title, then close the drawer 
      drawerListView.setItemChecked(position, true); 
      drawerListView.setSelection(position); 

      //setTitle((TextView)view).getText()); 
      drawerLayout.closeDrawer(drawerListView); 
     } else { 
      // error in creating fragment 
      Log.e("MainActivity", "Error in creating fragment"); 
     } 
    } 
} 

и это фрагмент

package com.example.testnav; 

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

    public class FragmentOne extends Fragment { 

    public FragmentOne(){} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_one, container, false); 

     return rootView; 
    } 
    } 

это мой XML

<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"> 

    <!-- The main content view --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <!-- The navigation drawer --> 
    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="#666" 

     android:dividerHeight="1dp" 
     android:background="#333" 
     android:paddingLeft="15sp" 
     android:paddingRight="15sp" 
     /> 

    </android.support.v4.widget.DrawerLayout> 
+1

попробуйте эту ссылку http://www.androidhive.info/2013/11/android-sliding-menu -using-navigation-drawer/ – skyshine

+0

В методе displayView, Замените свой FragmentManager на ** android.support.v4.app.FragmentManager ** , а также FragmentTransaction с ** android.support.v4.app.FragmentTransaction ** и использовать ** getSupportFragmentManager ** метод вместо getFragmentManager. Он будет доступен, если вы расширите свой класс с помощью функции ** FragmentActivity ** & not Activity. Дайте мне знать, если вам нужно больше разъяснений. – jQueen

ответ

1

Попробуйте использовать FragmentActivity вместо Activity

public class MainActivity extends FragmentActivity 

и

default: 
    fragment = new FragmentOne(); 
    break; 
+0

Почему? FragmentActivity следует использовать, если вы используете фрагменты из библиотеки поддержки. http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html и см. import 'import android.app.Fragment;' – Raghunandan

+0

Потому что вы используете фрагменты. – keshav

+0

Неправильно вы можете продлить действие, а также использовать фрагменты. проверьте lin i, опубликованную в моем предыдущем комментарии – Raghunandan

0

я получаю ту же ошибку. Необходимо изменить места буксировки следующим образом.

Во-первых, используйте FragmentActivity

public class MainActivity extends FragmentActivity 

Во-вторых, изменить getFragmentManager к getSupportFragmentManager:

FragmentManager fragmentManager = getSupportFragmentManager(); 
Смежные вопросы