简体   繁体   English

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

[英]Passing a Spinner value from one fragment to another

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。目前,我只是试图将片段2中的一个文本字段设置为微调器的值,但是稍后我将需要使片段1的微调器值与米等单位匹配,然后片段2才能采用该单位和用户输入,然后将其转换为第二个选定的用户输入。

In fragment 2 I have just typed out some 'bad' psuedo code to showcase what I'm trying to do: 在片段2中,我刚刚键入了一些“错误的”伪代码以展示我要执行的操作:

Main Activity 主要活动

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) {}
        });



    }

Fragment 1 片段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;

    }

Fragment 2 片段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;

    }
}

Add an onItemSelectedListener on your spinner to get the value selected in spinner. 在微调器上添加onItemSelectedListener以获得在微调器中选择的值。 Store it in an variable and use setArguments and get arguments method of fragment to set and get the value.. 将其存储在变量中,并使用setArguments和片段的arguments方法来设置和获取值。

Example: 例:

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)
    {

    }
});

For setting the arguments to your fragment...considering you have a method in your fragment names newInstance. 为了为片段设置参数...考虑到片段名称中有一个方法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");
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM