2013-08-01 3 views
0

Пришло время, когда кто-то включает некоторые коды, не объясняя. Ну, на этот раз это именно так, потому что коды совсем не сложны. Я пытаюсь переключить фрагменты в скользящем ящике. коды:Переключение фрагментов в скользящее меню?

mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

Вот DrawerItemClickListener Класс:

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) { 
    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction ft = manager.beginTransaction(); 
    Fragment frag = null; 
    switch (position) { 
    case 0: 
     ft.replace(R.id.content_frame, Algeria); 
     break; 
    case 1: 
     ft.replace(R.id.content_frame, Bahrain); 

     break; 
    case 2: 
     ft.replace(R.id.content_frame, Comoros); 
     break; 
    case 3: 
     ft.replace(R.id.content_frame, Djibouti); 
     break; 
    case 4: 
     ft.replace(R.id.content_frame, Egypt); 
     break; 
    case 5: 
     ft.replace(R.id.content_frame, Iraq); 
     break; 
    case 6: 
     ft.replace(R.id.content_frame, Jordan); 
     break; 
    case 7: 
     ft.replace(R.id.content_frame, Kuwait); 
     break; 
    case 8: 
     ft.replace(R.id.content_frame, Lebanon); 
     break; 
    case 9: 
     ft.replace(R.id.content_frame, Libya); 
     break; 
    case 10: 
     ft.replace(R.id.content_frame, Mauritania); 
     break; 
    case 11: 
     ft.replace(R.id.content_frame, Morocco); 
     break; 
    case 12: 
     ft.replace(R.id.content_frame, Oman); 
     break; 
    case 13: 
     ft.replace(R.id.content_frame, Pelastine); 
     break; 
    case 14: 
     ft.replace(R.id.content_frame, Qatar); 
     break; 
    case 15: 
     ft.replace(R.id.content_frame, Saudi_Arabia); 
     break; 
    case 16: 
     ft.replace(R.id.content_frame, Somalia); 
     break; 
    case 17: 
     ft.replace(R.id.content_frame, Sudan); 
     break; 
    case 18: 
     ft.replace(R.id.content_frame, Syria); 
     break; 
    case 19: 
     ft.replace(R.id.content_frame, Tunisia); 
     break; 
    case 20: 
     ft.replace(R.id.content_frame, Emirates); 
     break; 
    case 21: 
     ft.replace(R.id.content_frame, Yemen); 
     break; 
    } 
    ft.commit(); 

} 

НО ЭТО НЕ РАБОТАЕТ нет ошибок на всех, просто ничего шоу на экране! Я знаю, что фрагмент работает на 100%, но он не отображается на экране. Ну зачем!? Спасибо. :)

UPDATE FuL КОДЫ:

public class Drawer extends SherlockFragmentActivity { 
    MenuListAdapter mMenuAdapter; 
    String[] title; 
    String[] subtitle; 
    int[] icon; 
    SharedPreferences prefs; 
    public static String prefName = "SecretFile"; 
    Fragment Algeria = new Fragment1(); 
    Fragment Bahrain = new Fragment2(); 
    Fragment Comoros = new Fragment3(); 
    Fragment Djibouti = new Fragment4(); 
    Fragment Egypt = new Fragment5(); 
    Fragment Iraq = new Fragment6(); 
    Fragment Jordan = new Jordan(); 
    Fragment Kuwait = new Fragment8(); 
    Fragment Lebanon = new Lebanon(); 
    Fragment Libya = new Fragment10(); 
    Fragment Mauritania = new Fragment11(); 
    Fragment Morocco = new Fragment12(); 
    Fragment Oman = new Fragment13(); 
    Fragment Pelastine = new Fragment14(); 
    Fragment Qatar = new Qatar(); 
    Fragment Saudi_Arabia = new Fragment16(); 
    Fragment Somalia = new Fragment17(); 
    Fragment Sudan = new Fragment18(); 
    Fragment Syria = new Fragment19(); 
    Fragment Tunisia = new Fragment20(); 
    Fragment Emirates = new Fragment21(); 
    Fragment Yemen = new Fragment22(); 
    ConnectivityManager connMgr; 
    NetworkInfo networkInfo; 
    ListView mDrawerList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     SlidingMenu sm = new SlidingMenu(this); 
     title = getResources().getStringArray(R.array.country_array); 
     icon = new int[] { R.drawable.algeria, R.drawable.bahrain, 
       R.drawable.comoros, R.drawable.djibouti, R.drawable.egypt, 
       R.drawable.iraq, R.drawable.jordan, R.drawable.kuwait, 
       R.drawable.lebanon, R.drawable.libya, R.drawable.mauritania, 
       R.drawable.morocco, R.drawable.oman, R.drawable.pelastine, 
       R.drawable.qatar, R.drawable.saudiarabia, R.drawable.somalia, 
       R.drawable.sudan, R.drawable.syria, R.drawable.tunisia, 
       R.drawable.emirates, R.drawable.yemen, }; 
     sm.setMenu(R.layout.drawer_main); 
     sm.setShadowWidthRes(R.dimen.shadow_width); 
     sm.setShadowDrawable(R.drawable.shadow); 
     sm.setMode(SlidingMenu.LEFT_RIGHT); 
     sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); 
     sm.setFadeDegree(0.7f); 
     sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     sm.setSecondaryMenu(R.layout.menu_frame); 
     sm.setSecondaryShadowDrawable(R.drawable.shadow); 
     sm.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 
     mMenuAdapter = new MenuListAdapter(this, title, icon); 
     mDrawerList.setAdapter(mMenuAdapter); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

    } 

    private int seethefirstactivity() { 
     // TODO Auto-generated method stub 
     int fragmento; 
     connMgr = (ConnectivityManager) this 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     networkInfo = connMgr.getActiveNetworkInfo(); 
     fragmento = prefs.getInt("country", 1); 
     if (fragmento == 0) { 
      Algeria = new Fragment1(); 

     } else if (fragmento == 1) { 
      Bahrain = new Fragment2(); 

     } else if (fragmento == 2) { 
      Comoros = new Fragment3(); 

     } else if (fragmento == 3) { 
      Djibouti = new Fragment4(); 

     } else if (fragmento == 4) { 
      Egypt = new Fragment5(); 

     } else if (fragmento == 5) { 
      Iraq = new Fragment6(); 

     } else if (fragmento == 6) { 
      Jordan = new Jordan(); 

     } else if (fragmento == 7) { 
      Kuwait = new Fragment8(); 

     } else if (fragmento == 8) { 

      Lebanon = new Lebanon(); 

     } else if (fragmento == 9) { 
      Libya = new Fragment10(); 

     } else if (fragmento == 10) { 
      Mauritania = new Fragment11(); 

     } else if (fragmento == 11) { 
      Morocco = new Fragment12(); 

     } else if (fragmento == 12) { 
      Oman = new Fragment13(); 

     } else if (fragmento == 13) { 
      Pelastine = new Fragment14(); 

     } else if (fragmento == 14) { 
      Qatar = new Qatar(); 

     } else if (fragmento == 15) { 
      Saudi_Arabia = new Fragment16(); 

     } else if (fragmento == 16) { 
      Somalia = new Fragment17(); 

     } else if (fragmento == 17) { 
      Sudan = new Fragment18(); 

     } else if (fragmento == 18) { 
      Syria = new Fragment19(); 

     } else if (fragmento == 19) { 
      Tunisia = new Fragment20(); 

     } else if (fragmento == 20) { 
      Emirates = new Fragment21(); 

     } else if (fragmento == 21) { 
      Yemen = new Fragment22(); 

     } 
     return fragmento; 
    } 

    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) { 
     FragmentManager manager = getSupportFragmentManager(); 
     FragmentTransaction ft = manager.beginTransaction(); 
     Fragment frag = null; 
     switch (position) { 
     case 0: 
      ft.replace(R.id.content_frame, Algeria); 
      break; 
     case 1: 
      ft.replace(R.id.content_frame, Bahrain); 

      break; 
     case 2: 
      ft.replace(R.id.content_frame, Comoros); 
      break; 
     case 3: 
      ft.replace(R.id.content_frame, Djibouti); 
      break; 
     case 4: 
      ft.replace(R.id.content_frame, Egypt); 
      break; 
     case 5: 
      ft.replace(R.id.content_frame, Iraq); 
      break; 
     case 6: 
      ft.replace(R.id.content_frame, Jordan); 
      break; 
     case 7: 
      ft.replace(R.id.content_frame, Kuwait); 
      break; 
     case 8: 
      ft.replace(R.id.content_frame, Lebanon); 
      break; 
     case 9: 
      ft.replace(R.id.content_frame, Libya); 
      break; 
     case 10: 
      ft.replace(R.id.content_frame, Mauritania); 
      break; 
     case 11: 
      ft.replace(R.id.content_frame, Morocco); 
      break; 
     case 12: 
      ft.replace(R.id.content_frame, Oman); 
      break; 
     case 13: 
      ft.replace(R.id.content_frame, Pelastine); 
      break; 
     case 14: 
      ft.replace(R.id.content_frame, Qatar); 
      break; 
     case 15: 
      ft.replace(R.id.content_frame, Saudi_Arabia); 
      break; 
     case 16: 
      ft.replace(R.id.content_frame, Somalia); 
      break; 
     case 17: 
      ft.replace(R.id.content_frame, Sudan); 
      break; 
     case 18: 
      ft.replace(R.id.content_frame, Syria); 
      break; 
     case 19: 
      ft.replace(R.id.content_frame, Tunisia); 
      break; 
     case 20: 
      ft.replace(R.id.content_frame, Emirates); 
      break; 
     case 21: 
      ft.replace(R.id.content_frame, Yemen); 
      break; 
     } 
     ft.commit(); 

    } 

} 
+0

Может быть, это несущественно, но вы никогда не использовать 'осколочная '. Все эти фрагменты названия стран? Они были инициализированы? – Karakuri

+0

обновлен. Все приложение работало задолго до того, как я перехожу из навигационного ящика в скользящее меню ... –

+1

oh lord это baaad – Blundell

ответ

0

Хорошо, поэтому я думаю, что вы не использовали класс MyApplication много ..никаких проблем я не покажу вам:

MyApplication класс мы могли бы сказать, что это «общий», доступный класс, используемый для сохранения/восстановления данных с помощью методов в любое время в вас App:

Итак, давайте начнем:

в манифесте:

<application 

     android:name=".MyApplication" 

     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="myPackageName" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

, если вы видите в коде есть «андроид: имя =». MyApplication «» Вот ваше имя класса MyApplication вы будете создавать в вашем проекте.

Теперь мы просто создаем простой класс и распространяется на «Применение»

package youPackageName; 

public class MyApplication extends Application { 


/** 
* IN HERE WILL BE ALL YOUR VARIABLES AND METHODS 
*/ 
} 

так, как его использовать? easy ...

скажем, что вы хотите сохранить простую строку в порядке? с методами получения и установки этой строки

package youPackageName; 

    public class MyApplication extends Application { 

    String mString = ""; 

// To set my string 
public void setMyString(String s){ 
this.mString = s; 
} 
// get string 
public String getMyString(){ 
return this.mString; 
} 

// one you seted ones that string it will be abailable at any moment while your app is not destroyed 

    } 

От вашей деятельности мы будем называть этот метод в этом классе приложений как?

MyApplication MyApp; 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     MyApp = ((MyApplication)getApplicationContext()); 


//SET 
MyApp.setMyString("HELLO"); 

//GET 
String a = MyApp.getMyString(); 

} 

СЕЙЧАС! ФРАГМЕНТЫ!

Моя раскладка очень просто:

<LinearLayout 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" 
    android:orientation="vertical"> 

<FrameLayout 
     android:id="@+id/main_frag" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" /> 

</LinearLayout> 

в вашем MainActivity:

      // myNewFragment: FRAG TO BE REPLACE 
public void changeFragment(Fragment myNewFragment) { 
     FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 
     t.replace(R.id.main_frag, myNewFragment); 
     t.commit(); 
} 

в своем классе MyApplication мы только что создали до того

public void switchFragmentNormal(Activity a, Fragment newContent) { 
     MainActivity fca = (MainActivity)a; 
     fca.changeFragment(newContent); 
} 

и теперь, наконец из любого фрагмента или SlideMenu

Просто сделайте это;

MyApplication MyApp; 
public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

MyApp = (MyApplication)getActivity().getApplicationContext(); 

MyApp.switchFragmentNormal(getActivity(), new FragmentVote()); 
} 

Вот и все, теперь у вас есть класс, который доступен в любое время, где вы можете хранить переменные методы и т.д.

:-)

+0

awesome я попробую это и скажу вам результат. –

+0

уверен, все сомнения скажут мне! – Jason

+0

Можете ли вы показать мне, как я могу это сделать в своих кодах ??? и как я могу запустить фрагмент по умолчанию, зависящий от моих общих настроек? –

0

Когда я работаю с фрагментами я Doit так:

В MainActivity:

public void changeFragment(int frag, Fragment myNewFragment) { 
     FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 
     t.replace(frag, myNewFragment); 
     //t.addToBackStack(null); 
     t.commit(); 
} 

а также в моей Класс MyApplication У меня есть небольшие функции, поэтому я можно назвать их в любое время:

public void switchFragmentNormal(Activity a, Fragment newContent) { 
     MainActivity fca = (MainActivity)a; 
     fca.changeFragment(R.id.main_fragment, newContent); 
} 

Так что этот путь, из любого меню фрагмента или слайд я сделать небольшой вызов и я изменю его легко: и я делаю «новый Somthing()» только тогда, когда мне нужно чтобы:

FragmentVote fvote = new FragmentVote(); 
MyApp.switchFragmentNormal(getActivity(), fvote); 

изменить фрагмент и закрыть slidemenu "SlidingMenu- сделанный: jfeinstein10" сделать это таким образом:

SlidingMenu sm = getSlidingMenu(); 
sm.setMode(SlidingMenu.LEFT_RIGHT); 
... 
    public void changeFragmentFromList(int frag, Fragment myNewFragment) { 
      sm.toggle(); // this closes the slidemenu 
      FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 
      t.replace(frag, myNewFragment); 
      t.commit(); 
    } 

и назвать его: MyApplication CLA SS

public void switchFragmentNormalList(Activity a, Fragment newContent) { 
     MainActivity fca = (MainActivity)a; 
     fca.changeFragmentFromList(R.id.main_fragment, newContent); 
} 

Тогда: и я сделать «новый Somthing()» только тогда, когда мне нужно:

FragmentVote fvote = new FragmentVote(); 
MyApp.switchFragmentNormalList(getActivity(), fvote); 

Тогда иногда я хочу, чтобы добавить в стек свой фрагмент, так что я могу сделать другие вещи и т.д.

проверить это:

https://stackoverflow.com/a/17978786/2625912

Надеюсь помочь вам!

+0

так как я могу реализовать его в своем приложении? я получаю полчаса без каких-либо результатов. –

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