Пользовательское скользящее меню

#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();
  

Если вы этого не сделаете, то потребуется фактический размер содержимого (сразу после вкладок).