У меня есть активность только с 2 кнопками и FrameLayout:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:id="@+id/linearLayout">
    <Button
        android:id="@+id/btPrincipal1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ver Fragment 1"
        android:layout_gravity="center_horizontal"
        android:layout_weight="1"
        />
    <Button
        android:id="@+id/btPrincipal2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ver Fragment 2"
        android:layout_gravity="center_horizontal"
        android:layout_weight="1"/>

</LinearLayout>

<FrameLayout
    android:layout_width="250dp"
    android:layout_height="match_parent"

    android:id="@+id/contenedor"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_below="@+id/linearLayout">


</FrameLayout>

Когда я нажимаю кнопку 1, я вызываю фрагмент и, когда я нажимаю кнопку 2, я хочу вызвать тот же фрагмент, но с разными свойствами. Например:

Я нажимаю кнопку 1, вызываю фрагмент A с зеленым цветом фона.

Я нажимаю кнопку 2, вызываю фрагмент A с красным цветом фона.

Это возможно? и как я могу это сделать? Спасибо.

0
Luis Yul 4 Апр 2017 в 23:40

2 ответа

Лучший ответ

В MainActivity выполните:

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

    Button button1 = (Button) findViewById(R.id.btPrincipal1);
    Button button2 = (Button) findViewById(R.id.btPrincipal2);

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FragmentManager supportFragmentManager = getSupportFragmentManager();
            Bundle bundle = new Bundle();
            bundle.putString(COLOR_PARAM, "green");
            supportFragmentManager.beginTransaction()
                    .replace(R.id.contenedor, YourFragment.newInstance("Button1"))
                    .commit();
        }
    });

    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FragmentManager supportFragmentManager = getSupportFragmentManager();
            Bundle bundle = new Bundle();
            bundle.putString(COLOR_PARAM, "red");
            supportFragmentManager.beginTransaction()
                    .replace(R.id.contenedor,  YourFragment.newInstance("Button2"))
                    .commit();
        }
    });
}

Затем в YourFragment.java выполните:

public class YourFragment extends Fragment {

public static final String COLOR_PARAM = "param1";

private String currentColor;

public YourFragment() {}


public static Fragment newInstance(String param) {
    Fragment fragment = new Fragment();
    Bundle args = new Bundle();
    args.putString(COLOR_PARAM, param);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        currentColor = getArguments().getString(COLOR_PARAM);
    }

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.your_fragment_layout, container, false);
    FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.fragment_layout);
    if (currentColor.equals("green")) {
        frameLayout.setBackgroundColor(getActivity().getResources().getColor(android.R.color.holo_green_dark));
    }
    else if (currentColor.equals("red")) {
        frameLayout.setBackgroundColor(getActivity().getResources().getColor(android.R.color.holo_red_dark));
    }

    return view;
}
}
0
Roger 4 Апр 2017 в 21:23

Если вы хотите изменить фон, просто создайте и объект вашего фрагмента, и после нажатия на кнопки вызовите метод для изменения фона фрагмента. но если вы хотите изменить компоновку фрагментов или что-то другое, создайте новый фрагмент для удобства чтения кода.

Попробуй это:

public class FragmentA extends Fragment {
    public static FragmentA newInstance(int colorResId) {
        FragmentA fragment = new FragmentA();
        Bundle bundle = new Bundle();
        bundle.putInt("colorId", colorResId);
        fragment.setArguments(bundle);
        return new FragmentA();
    }

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        int resId = getArguments().getInt("colorId", 0);
        if (resId != 0) {
            //set background
        }
    }

    public void changeBackground(int colorId){
        //set background
    }
}
0
FarshidABZ 4 Апр 2017 в 20:49