задача с передачей объекта в фрагмент

215
25 апреля 2018, 07:50

Помогите решить задачу, в моем способе есть неразрешимая проблема.

Собственно цель: есть коллекция, расширенных от Button кнопок, количество элементов допустим 100, мне необходимо создавать фрагменты с 9-ю кнопками в каждом, из этой коллекции.

Как в фрагмент передать элементы коллекции или саму коллекцию?

Answer 1

Не знаю зачем хранить и передавать список кнопок, но можно попробовать как-то так:

public class SomeFragment extends Fragment {
    private static final String BUTTONS_ID = "button_list";
    public static SomeFragment newInstance(List<Button> buttons) {
        Bundle args = new Bundle();
        args.putSerializable(BUTTONS_ID, buttons);
        SomeFragment fragment = new SomeFragment();
        fragment.setArguments(args);
        return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        List<Button> buttons = (List<Button>) getArguments().getSerializable(BUTTONS_ID);
        ...
    }
}
public class SomeActivity extends Activity {
    public void someMethod() {
        Fragment someFragment = SomeFragment.newInstance(buttonList);
    }
}
Answer 2

Получилось как-то так но боюсь очень уж плохой вариант Фрагмент

import android.app.Fragment;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
import android.widget.TableRow;
import java.util.ArrayList;

public class FragmentOfGameLevels extends Fragment {
    private TableRow row1;
    private TableRow row2;
    private TableRow row3;
    @Override
    public View onCreateView(LayoutInflater inflater,  ViewGroup container, Bundle savedInstanceState) {
        Context context = getActivity().getApplicationContext();
        TableLayout table = new TableLayout(context);
        table.addView(row1);
        table.addView(row2);
        table.addView(row3);
        return table;
    }
    public void setBtnInFragment( Context context, ArrayList <LvlButton> array){
        row1 = new TableRow(context);
        row1.setBackgroundColor(Color.GREEN);
        row2 = new TableRow(context);
        row2.setBackgroundColor(Color.BLUE);
        row3 = new TableRow(context);
        row3.setBackgroundColor(Color.RED);
        row1.addView(array.get(0));
        row1.addView(array.get(1));
        row1.addView(array.get(2));
        row2.addView(array.get(3));
        row2.addView(array.get(4));
        row2.addView(array.get(5));
        row3.addView(array.get(6));
        row3.addView(array.get(7));
        row3.addView(array.get(8));
    }
}

Активити

import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import java.util.ArrayList;
public class MainGameWindowActivity extends AppCompatActivity {
    private Button btnLeft;
    private Button btnRight;
    private Button btnSound;
    private Button btnMusic;
    private Button btnLanguage;
    private Button btnGooglePlay;
    private Button btnExit;
    private ArrayList <LvlButton> listBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_game_window_layout);
        //устанавливаем настройки экрана (смотри класс WindowConfiguration)
        WindowConfiguration.setWindowConfig(this);
        WindowConfiguration.getSizeDevice(this);
        listBtn = new ArrayList<LvlButton>();
        for(int i = 1; i < 10; i++){
            listBtn.add(new LvlButton(this, String.valueOf(i),WindowConfiguration.getHeightDevice()/3));
        }
        //получаем высоту устройства
        int heightDevice = WindowConfiguration.getHeightDevice();
        FrameLayout frameLayout = findViewById(R.id.frame_layout);
        //устанавливаем высоту и ширену контейнера равную реальной высоте устройства
        frameLayout.setLayoutParams(new LinearLayout.LayoutParams(heightDevice, heightDevice));
        FragmentOfGameLevels fragment = new FragmentOfGameLevels();
        fragment.setBtnInFragment(this ,listBtn);
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        fragmentTransaction.add(R.id.frame_layout, fragment);
        fragmentTransaction.commit();
    }
//____________________________________________________________________________________________
    @Override
    protected void onResume() {
        super.onResume();
        WindowConfiguration.setWindowConfig(this);
    }
}

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

READ ALSO
java telegram bot выгрузка документа

java telegram bot выгрузка документа

Каким образом можно реализовать выгрузку документа(любого бинарного) ботом на java? Например, по команде бот формирует xlsx и должен выгрузить...

245
Что такое Domain Layer?

Что такое Domain Layer?

Я новичок и только познаю JavaВ задании сказано применить логику Domain Layer? но что это и как применять не пойму и не могу найти в интернете понятного...

177
работа jar файла 24/7

работа jar файла 24/7

Вопрос возможно довольно странный, но все жеСуть такая

136