#android #slidingmenu
#Android #slidingmenu
Вопрос:
Я видел здесь много постов, и один помог мне, но я думаю, что я что-то упускаю…
Я создал ActivitySlider с этим (просто пример кода)
public ActivitySlider(FragmentActivity activity, String loginU, String passU, String phpsessid)
{
this.activity = activity;
bundle = new Bundle();
bundle.putString("loginU", loginU);
bundle.putString("passU", passU);
bundle.putString("phpsessid", phpsessid);
// We get the View of the Activity
this.content = (View) activity.findViewById(R.id.drawer_layout).getParent();
ListView listTmp = (ListView) content.findViewById(R.id.left_drawer);
String[] mMenuTitles = activity.getResources().getStringArray(R.array.menu_array);
String[] tmp = {"Hello","'Suuppppp"," ? "};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.activity, R.layout.drawer_list_item, tmp);
listTmp.setAdapter(adapter);
// And its parent
// The container for the menu Fragment is added to the parent. We set an id so we can perform FragmentTransactions later on
this.menuContainer = new FrameLayout(this.activity);
this.menuContainer.setId(R.id.content_frame);
// We set visibility to GONE because the menu is initially hidden
//this.menuContainer.setVisibility(View.GONE);
ViewGroup parent = (ViewGroup) this.content.getParent();
parent.addView(this.menuContainer);
}
public <T extends Fragment> void setMenuFragment(Class<T> cls)
{
Fragment fragment = Fragment.instantiate(this.activity, cls.getName());
setMenuFragment(fragment);
}
public void setMenuFragment(Fragment fragment)
{
FragmentManager manager = this.activity.getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
fragment.setArguments(bundle);
transaction.replace(R.id.content_frame, fragment);
transaction.commit();
}`
Итак, я вызываю это действие в другом действии (я не могу использовать панель навигации с переключением, потому что у меня уже есть вкладки). :
slider = new ActivitySlider(this, loginU, passU, sessid);
slider.setMenuFragment(MenuFragment.class);
Это мой код фрагментации меню :
/**
* "Constructeur" : inflate la vue
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
//Récupération des arguments
int i = getArguments().getInt(ARG_MENU_NUMBER);
String loginU = getArguments().getString("loginU");
String passU = getArguments().getString("passU");
String sessid = getArguments().getString("phpsessid");
Log.i("MenuFrag loginU passU",loginU " - " passU);
Log.i("resArg", i "");
String section = "";
View rootView = null;
switch(i)
{
//Home
case 0:
rootView = inflater.inflate(R.layout.home, container, false);
section = getResources().getStringArray(R.array.menu_array)[i];
getActivity().setTitle(section);
return rootView;
//Demandes/Propositions
case 1:
rootView = inflater.inflate(R.layout.activity_viewpagertabs, container, false);
section = getResources().getStringArray(R.array.menu_array)[i];
getActivity().setTitle(section);
Intent askpurp = new Intent(getActivity(),PagerWithTab.class);
Bundle bundle = new Bundle();
bundle.putString("loginU",loginU);
bundle.putString("passU",passU);
bundle.putString("phpsessid",sessid);
askpurp.putExtras(bundle);
getActivity().startActivity(askpurp);
return rootView;
//Awesome
case 2:
rootView = inflater.inflate(R.layout.awesome, container, false);
section = getResources().getStringArray(R.array.menu_array)[i];
getActivity().setTitle(section);
return rootView;
default:
rootView = inflater.inflate(R.layout.awesome2, container, false);
section = getResources().getStringArray(R.array.menu_array)[i];
getActivity().setTitle(section);
return rootView;
}
}
Скольжение работает нормально, но слева от меня есть белое поле, и я ожидаю, что там будет мое меню. Что я должен исправить?
Ответ №1:
Класс MenuFragment не может использоваться подобным образом. Здесь новый фрагмент меню:
public class MenuFrag extends ListFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.menutest, null, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
String[] sections = getResources().getStringArray(R.array.menu_array);
ArrayAdapter<String> sectionAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, sections);
setListAdapter(sectionAdapter);
}
}
И вот макет:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@ id/android:list"
android:layout_alignParentRight="true"
android:background="@color/wezo_color_blue" android:layout_alignParentTop="true"/>
</RelativeLayout>
Теперь вы можете вызывать:
slider.setMenuFragment(MenuFrag.class);
Последняя проблема, которую нужно решить, — это размер меню. Все, что нужно сделать, это изменить следующую строку:
this.content = (View) activity.findViewById(R.id.drawer_layout).getParent();
Для
this.content = (View) activity.findViewById(android.R.id.content).getParent();
Если вы этого не сделаете, то потребуется фактический размер содержимого (сразу после вкладок).