Как передать данные, включенные в Activity1 / фрагмент A, в Activity1 / фрагмент B, ПОТОМ передать их в Activity2 - PullRequest
0 голосов
/ 10 апреля 2019

Я разрабатываю приложение с двумя действиями.В моей Деятельности 1 у меня есть NavigationDrawer, который включал фрагменты.У меня есть Spinners в 2 фрагментах.

Я хотел бы передать данные Fragment1 и данные Fragment2 в Fragment3 (все еще в том же упражнении), а затем кодировать кнопку, которая отправляет данные, собранные в Fragment 3, в занятие 2.

Я могу передать данные из упражнения 1 в упражнение 2, но я не знаю, как извлечь данные из фрагмента и передать их в упражнение 2.

Я новичок во фрагментах....

Код одного из моих фрагментов, включая СПИННЕРЫ:

public static TypeInterventionFragment newInstance() {return (new TypeInterventionFragment()); }


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

        mSpinner1 = (Spinner) view.findViewById(R.id.spinner1);
        mSpinner2 = (Spinner) view.findViewById(R.id.spinner2);
        mSpinner3 = (Spinner) view.findViewById(R.id.spinner3);

        mSpinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selectedClass = parent.getItemAtPosition(position).toString();
                switch (selectedClass)
                {
                    case "Constatation du dégat des eaux":
                        // assigning div item list defined in XML to the div Spinner
                        mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
                                android.R.layout.simple_spinner_dropdown_item,
                                getResources().getStringArray(R.array.sousliste1)));

                        mSpinner3.setAdapter(new ArrayAdapter<String>(getActivity(),
                                android.R.layout.simple_spinner_dropdown_item,
                                getResources().getStringArray(R.array.resultat)));
                        break;

                    case "Relevé humidité":
                        mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
                                android.R.layout.simple_spinner_dropdown_item,
                                getResources().getStringArray(R.array.sousliste2)));
                        break;

                    case "Thermographie Infrarouge":
                        mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
                                android.R.layout.simple_spinner_dropdown_item,
                                getResources().getStringArray(R.array.sousliste3)));
                        break;

                    case "Mise en pression":
                        mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
                                android.R.layout.simple_spinner_dropdown_item,
                                getResources().getStringArray(R.array.sousliste4)));
                        break;

                    case ">Mise en évacuation équipement sanitaire":
                        mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
                                android.R.layout.simple_spinner_dropdown_item,
                                getResources().getStringArray(R.array.sousliste5)));
                        break;

                    case "Aspersion équipement sanitaire":
                        mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
                                android.R.layout.simple_spinner_dropdown_item,
                                getResources().getStringArray(R.array.sousliste6)));
                        break;

                    case "Inspection vidéo dans canalisation":
                        mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
                                android.R.layout.simple_spinner_dropdown_item,
                                getResources().getStringArray(R.array.sousliste7)));
                        break;

                }

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }

        });

        return view;

    }

}

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

Если вы знаете, как это сделать, вы, вероятно, спасете мою жизнь. LOL Я работаю над этим с 2 месяцев

СПАСИБО МНОГО и за мой французскийприятель: Merci les amis si vous pouvez m'aider !!!

Ответы [ 3 ]

0 голосов
/ 11 апреля 2019

Рекомендуемый способ связи между фрагментами - создать общий объект ViewModel.

Вот ссылка на Developer.android.com:

Общение с другими фрагментами |Разработчики Android

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

0 голосов
/ 11 апреля 2019

Большое спасибо, вот код моей MainActivity:

//FOR DESIGN

private Toolbar toolbar;

private DrawerLayout drawerLayout;
private NavigationView navigationView;

//FOR FRAGMENTS
private Fragment fragmentIntro;
private Fragment fragmentPhoto;
private Fragment fragmentProfile;
private Fragment fragmentDossier;
private Fragment fragmentDate;
private Fragment fragmentZone;
private Fragment fragmentTypeIntervention;


//FOR DATAS
private static final int FRAGMENT_INTRO = 0;
private static final int FRAGMENT_PHOTO = 1;
private static final int FRAGMENT_PROFILE = 2;
private static final int FRAGMENT_DOSSIER = 3;
private static final int FRAGMENT_DATE = 4;
private static final int FRAGMENT_ZONE = 5;
private static final int FRAGMENT_TYPE_INTERVENTION = 6;


// FOR STRINGS

private static TextView mFragmentPageNewsTitle;


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

    // Configure all views
    this.configureToolBar();
    this.configureDrawerLayout();
    this.configureNavigationView();

    // Show First Fragment
    this.showFirstFragment();
}

@Override
public void onBackPressed() {
    // Handle back click to close menu
    if (this.drawerLayout.isDrawerOpen(GravityCompat.START)) {
        this.drawerLayout.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}


@Override
public boolean onNavigationItemSelected(MenuItem item) {

    int id = item.getItemId();

    // Show fragment after user clicked on a menu item
    switch (id){

        case R.id.activity_main_drawer_intro :
            this.showFragment(FRAGMENT_INTRO);
            break;

        case R.id.activity_main_drawer_photo :
            this.showFragment(FRAGMENT_PHOTO);
            break;

        case R.id.activity_main_drawer_profile:
            this.showFragment(FRAGMENT_PROFILE);
            break;
        case R.id.activity_main_drawer_dossier:
            this.showFragment(FRAGMENT_DOSSIER);
            break;

        case R.id.activity_main_drawer_date:
            this.showFragment(FRAGMENT_DATE);
            break;

        case R.id.activity_main_drawer_zone:
            this.showFragment(FRAGMENT_ZONE);
            break;

        case R.id.activity_main_drawer_typeintervention:
            this.showFragment(FRAGMENT_TYPE_INTERVENTION);
            break;

        default:
            break;
    }

    this.drawerLayout.closeDrawer(GravityCompat.START);
    return true;
}





// ---------------------
// CONFIGURATION
// ---------------------

// Configure Toolbar
private void configureToolBar(){
    this.toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);
    setSupportActionBar(toolbar);
}

// Configure Drawer Layout
private void configureDrawerLayout(){
    this.drawerLayout = (DrawerLayout) findViewById(R.id.activity_main_drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(toggle);
    toggle.syncState();
}

// Configure NavigationView
private void configureNavigationView(){
    this.navigationView = (NavigationView) findViewById(R.id.activity_main_nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}

// ---------------------
// FRAGMENTS
// ---------------------

// Show first fragment when activity is created
private void showFirstFragment(){
    Fragment visibleFragment = getSupportFragmentManager().findFragmentById(R.id.activity_main_frame_layout);
    if (visibleFragment == null){
        // Show Photo Fragment
        this.showFragment(FRAGMENT_INTRO);
        // Mark as selected the menu item corresponding to PhotoFragment
        this.navigationView.getMenu().getItem(0).setChecked(true);
    }
}

// Show fragment according an Identifier
private void showFragment(int fragmentIdentifier){
    switch (fragmentIdentifier){

        case FRAGMENT_INTRO :
            this.showIntroFragment();
            break;

        case FRAGMENT_PHOTO :
            this.showPhotoFragment();
            break;
        case FRAGMENT_PROFILE:
            this.showProfileFragment();
            break;
        case FRAGMENT_DOSSIER:
            this.showClientsFragment();
            break;

        case FRAGMENT_DATE:
            this.showDateFragment();
            break;

        case FRAGMENT_ZONE:
            this.showZoneFragment();
            break;

        case FRAGMENT_TYPE_INTERVENTION:
            this.showTypeInterventionFragment();
            break;

        default:
            break;
    }
}

// ---

// Create each fragment page and show it
private void showIntroFragment() {
    if (this.fragmentIntro == null) this.fragmentIntro = IntroFragment.newInstance();
    this.startTransactionFragment(this.fragmentIntro);
}

private void showPhotoFragment(){
    if (this.fragmentPhoto == null) this.fragmentPhoto = PhotoFragment.newInstance();
    this.startTransactionFragment(this.fragmentPhoto);
}

private void showClientsFragment(){
    if (this.fragmentDossier == null) this.fragmentDossier = DossierFragment.newInstance();
    this.startTransactionFragment(this.fragmentDossier);
}

private void showProfileFragment(){
    if (this.fragmentProfile == null) this.fragmentProfile = ProfileFragment.newInstance();
    this.startTransactionFragment(this.fragmentProfile);
}

private void showDateFragment(){
    if (this.fragmentDate == null) this.fragmentDate = DateFragment.newInstance();
    this.startTransactionFragment(this.fragmentDate);
}

private void showZoneFragment(){
    if (this.fragmentZone == null) this.fragmentZone = ZoneFragment.newInstance();
    this.startTransactionFragment(this.fragmentZone);
}

private void showTypeInterventionFragment(){
    if (this.fragmentTypeIntervention == null) this.fragmentTypeIntervention = TypeInterventionFragment.newInstance();
    this.startTransactionFragment(this.fragmentTypeIntervention);
}



// ---

// Generic method that will replace and show a fragment inside the MainActivity Frame Layout
private void startTransactionFragment(Fragment fragment){
    if (!fragment.isVisible()){
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.activity_main_frame_layout, fragment).commit();
    }
}

}

0 голосов
/ 10 апреля 2019

Всякий раз, когда вы создаете фрагменты своей деятельности, вы можете сохранить ссылку на них. Допустим, ваша ActivityA и ваш блок создания фрагмента выглядят так:

public class ActivityA extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FragmentTransaction fragmentTransactionA = getSupportFragmentManager().beginTransaction();
        fragmentTransactionA.replace(R.id.yourFragmentAContainerID, new FragmentA(), "fragmentA");
        fragmentTransactionA.commit();
        FragmentTransaction fragmentTransactionB = getSupportFragmentManager().beginTransaction();
        fragmentTransactionB.replace(R.id.yourFragmentBContainerID, new FragmentB(), "fragmentB");
        fragmentTransactionB.commit();
    }
}

Вместо того, чтобы просто использовать new FragmentA() или new FragmentB(), вы можете создавать свойства для своей деятельности и присваивать им значения ваших новых фрагментов, эффективно создавая связь между ActivityA и вашими фрагментами.

public class ActivityA extends AppCompatActivity {

    private FragmentA fragmentA;
    private FragmentB fragmentB;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FragmentTransaction fragmentTransactionA = getSupportFragmentManager().beginTransaction();
        fragmentA = new FragmentA();
        fragmentTransactionA.replace(R.id.yourFragmentAContainerID, fragmentA, "fragmentA");
        fragmentTransactionA.commit();
        FragmentTransaction fragmentTransactionB = getSupportFragmentManager().beginTransaction();
        fragmentB = new FragmentB();
        fragmentTransactionB.replace(R.id.yourFragmentBContainerID, fragmentB, "fragmentB");
        fragmentTransactionB.commit();
    }
}

Тем не менее, теперь вы можете в любой момент получить переменные из фрагментов, пока вы находитесь в своей деятельности. Допустим, вы хотите получить «propertyX» фрагмента A и «propertyY» фрагмента B, теперь вы можете просто вызывать fragmentA.getPropertyX() и fragmentB.getPropertyY() во время вашей активности, прежде чем перейти к ActivityB, если у вас уже есть эти методы, и они публичные. Это всего лишь пример, так как у нас нет всего вашего кода по вашему вопросу, я позволил себе создать образец класса.

Пожалуйста, входите, если вам все еще нужна помощь.

...