Студия Android - можно ли добавить вкладки, указывающие на фрагменты из дизайнера?

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

Возможно ли это от дизайнера Android Studio?

Я добавил в свой макет вкладки, как на изображении ниже, но на реальном устройстве не отображается.

введите здесь описание изображения

Как я могу это решить?

Спасибо за любой совет.


person redrom    schedule 11.09.2014    source источник


Ответы (1)


Я уменьшу свой пример на одну кнопку, у вас должно получиться его умножить. Я также вырезал ненужные вещи, такие как поля и т. д. Если у вас есть проблемы, просто скажите мне, и я с радостью помогу вам:

MainActivity.java — метод openHome интересен

public class MainActivity extends Activity implements HomeFragment.OnFragmentInteractionListener
{
    FragmentManager fragmentManager = getFragmentManager();

    HomeFragment homeFragment;


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

        homeFragment = new HomeFragment();

        fragmentManager.beginTransaction().add(R.id.mainFrame, homeFragment).commit();
    }

    public void openHome(View view)
    {
        homeFragment = new HomeFragment();
        fragmentManager.beginTransaction().replace(R.id.mainFrame, homeFragment).commit();
    }

    @Override
    public void onFragmentInteractionHome(Uri uri)
    {
        Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show();//only to check, can be removed (the content, the method must be implemented!!!!!!!!!!!!!!!)
    }
}

Activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:ignore="MergeRootFrame" >

    <FrameLayout
        android:id = "@+id/mainFrame"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:layout_marginBottom = "@dimen/bottom_Main_Tabs">
        </FrameLayout>

    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "@dimen/bottom_Main_Tabs"
        android:layout_gravity = "bottom"
        >

        <ImageButton
            android:id = "@+id/bottomButton_home"
            android:layout_height = "match_parent"
            android:layout_width = "0dp"
            android:layout_weight = "1.0"
            android:background = "@drawable/ic_home_white"
            android:onClick = "openHome"
            />
    </LinearLayout>
</FrameLayout>

HomeFragment.java - если создать фрагмент, то все это будет сгенерировано автоматически плюс комментарии, которые я вырезал.!!! Интересен только внутренний интерфейс внизу!!!:

import android.app.Activity;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class HomeFragment extends Fragment
{
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    private String mParam1;
    private String mParam2;

    private OnFragmentInteractionListener mListener;

    public static HomeFragment newInstance(String param1, String param2)
    {
        HomeFragment fragment = new HomeFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    public HomeFragment()
    {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        if (getArguments() != null)
        {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home, container, false);
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri)
    {
        if (mListener != null)
        {
            mListener.onFragmentInteractionHome(uri);
        }
    }

    @Override
    public void onAttach(Activity activity)
    {
        super.onAttach(activity);
        try
        {
            mListener = (OnFragmentInteractionListener) activity;
        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach()
    {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener
    {
        // TODO: Update argument type and name
        public void onFragmentInteractionHome(Uri uri);
    }

}

фрагмент_home.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/home_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blue"
    tools:context="com.domain.app.HomeFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:textSize="100sp"
        android:text="Home" />

</FrameLayout>

Я думаю, это все. Если нет, то просто скажи :)

person JRsz    schedule 11.09.2014
comment
Да, я хочу открывать фрагменты, когда я нажимаю на вкладку, но я думаю, что определение вкладок должно быть в файле макета, это означает, что не создавать кнопки программно. - person redrom; 11.09.2014
comment
хорошо, я отредактирую свой ответ и заполню его кодом. Это будет так, как я это сделал. Только сегодня заработало :D - person JRsz; 11.09.2014
comment
Я отредактировал ответ и надеюсь, что это поможет. Если нет, скажите мне, если это так, проголосуйте, пожалуйста: D - person JRsz; 11.09.2014