将Spinner值从一个片段传递到另一个片段

将Spinner值从一个片段传递到另一个片段

问题描述:

我需要在第一个片段中获取微调器的值并将值传递给片段2.目前我只是尝试将片段2中的一个文本字段设置为微调器的值,但稍后我需要以某种方式使片段1微调器值匹配像米一样的单位,然后片段2能够获取该单元和用户输入然后将其转换为第二个选定的用户输入。

I need to get the value of the spinner set in the first fragment and pass the value along to fragment 2. At the moment I'm just trying to set one text field in fragment 2 to the spinner's value, but later on I'll need to somehow have the fragment 1 spinner value match a unit like meters, and then for fragment 2 to be able to take that unit and a user input to then convert it into a second chosen user input.

在片段2中,我刚输入一些坏的伪代码来展示我正在尝试做的事情:

In fragment 2 I have just typed out some 'bad' psuedo code to showcase what I'm trying to do:

主要活动

public class MainActivity extends AppCompatActivity {

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



        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText(R.string.tab_page1));
        tabLayout.addTab(tabLayout.newTab().setText(R.string.tab_page2));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(),
                tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new
                TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {}
            @Override
            public void onTabReselected(TabLayout.Tab tab) {}
        });



    }

片段1

public class Page1Fragment extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
            savedInstanceState) {

        View view = inflater.inflate(R.layout.page1_fragment, container, false);


        Spinner spinner = (Spinner) view.findViewById(R.id.spinner);

// Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.planets_array, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
        spinner.setAdapter(adapter);



        return view;

    }

片段2

public class Page2Fragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
            savedInstanceState) {
        View view = inflater.inflate(R.layout.page2_fragment, container, false);
        fragment1Spinner = Page1Fragment.getSpinnerValue

        TextView text = (TextView) view.findViewById(R.id.textView2);
       text.setText(fragment1Spinner);

        return view;

    }
}


在微调器上添加onItemSelectedListener以获取在微调器中选择的值。将它存储在变量中并使用setArguments并获取要设置的片段的参数方法并获取值..

Add an onItemSelectedListener on your spinner to get the value selected in spinner. Store it in an variable and use setArguments and get arguments method of fragment to set and get the value..

示例:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
    {
        // this line will get you the selected item of the spinner
        String selectedValue = parent.getItemAtPosition(position).toString(); 
    }

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

    }
});

用于设置片段的参数...考虑到片段中有一个方法名称为newInstance。导航到第二个片段时设置此项。

For setting the arguments to your fragment...considering you have a method in your fragment names newInstance. set this when navigating to second fragment.

Bundle bundle = new Bundle();
bundle.putString("selectedSpinnerItemKey", selectedSpinnerItemValue);

Fragment fragment = YourFragment.newInstance();
fragment.setArguments(bundle);

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContent, fragment);
transaction.commit();

现在获取第二个片段中的参数。

Now getting the arguments in second fragment.

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    if (getArguments() != null)
    {
        String itemFromFirstFragment = getArguments().getString("selectedSpinnerItemKey");
    }
}