如何将 Spinner 的数据或位置从 Activity 传递到 ListFragment

How to pass Data or Position of Spinner from Activity to ListFragment

我创建了一个 activity,其中我拿了一个微调器。现在我想将微调器中所选项目的数据(字符串名称或 Position int)传递给一个 listFragment。我尝试在片段中使用 Bundle 和 getActivity(),但数据没有传递。我知道这很粗糙,但我是 Android 编程的新手。谢谢你! (P.S。我也使用无线电组在 2 个微调器之间切换)

public class HighScore extends Activity {

TextView t;
RadioGroup r;
int pos,pos1,value;
ArrayAdapter<CharSequence> adapter, adapter1;
Spinner spinner,spinner1;
String[] classic,arcade;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.highscore);
    r = (RadioGroup) findViewById(R.id.radioGroup);
    spinner = (Spinner) findViewById(R.id.spinner);

    classic = new String[]{"Easy", "Hard"};
    arcade = new String[]{"30", "60", "90"};
    adapter = new ArrayAdapter<CharSequence>(getBaseContext(), android.R.layout.simple_spinner_item, classic);
    adapter1 = new ArrayAdapter<CharSequence>(getBaseContext(), android.R.layout.simple_spinner_item, classic);
    spinner.setVisibility(View.VISIBLE);


    // 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);
    r.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            pos = r.indexOfChild(findViewById(checkedId));
            switch (pos) {
                case 0:

                    // Create an ArrayAdapter using the string array and a default spinner layout
                    adapter = new ArrayAdapter<CharSequence>(getBaseContext(), android.R.layout.simple_spinner_item, classic);


                    // 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);
                    spinner.getOnItemSelectedListener();

                    break;

                case 1:

                    // Create an ArrayAdapter using the string array and a default spinner layout
                    adapter = new ArrayAdapter<CharSequence>(getBaseContext(), android.R.layout.simple_spinner_item, arcade);


                    // 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);

                    break;

            }
        }
    });


    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            switch (position) {
                case 0:
                    getFragmentManager().beginTransaction()
                            .replace(R.id.fragment1, Fragment.instantiate(getBaseContext(), FragEasy.class.getName())).commit();
                    break;
                case 1:
                    getFragmentManager().beginTransaction()
                            .replace(R.id.fragment1, Fragment.instantiate(getBaseContext(), FragHard.class.getName())).commit();
                    break;
            }


        }

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

        }
    });

首先在 activity 中创建一个包:

Bundle bundle = new Bundle();
bundle.putString("TAG", *position/value as string here* );

// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

为此,您的片段应将 bundle 作为 onCreateView 函数的参数。如果你不需要一直使用 bundle,你可以说如果 bundle null 那么不要做这部分或你在那里需要的其他东西。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String strtext = getArguments().getString("edttext");    
    return inflater.inflate(R.layout.fragment, container, false);
}

以便您为您的片段设置包,现在可以通过将其转换回字符串来随意使用它。

String _strBundle = _bundle.toString();

祝你好运!

您也可以像这样在您的片段构造函数上传递微调器 select 项。

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                     //get selected spinner value.
            switch (position) {
                case 0:
                    getFragmentManager().beginTransaction()
                            .replace(R.id.fragment1, Fragment.instantiate(getBaseContext(), FragEasy.class.getName(),selected_value)).commit();
                    break;
                case 1:
                    getFragmentManager().beginTransaction()
                            .replace(R.id.fragment1, Fragment.instantiate(getBaseContext(), FragHard.class.getName(),selected_value)).commit();
                    break;
            }


        }

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

        }
    });

您可以根据微调器值添加或替换片段,如下所示:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        switch(position) {
            case 0:
                 FragEasy fragEasy = new FragEasy();
                 ft =  getFragmentManager().beginTransaction() ;
                 ft.replace(R.id.fragment, fragEasy).addToBackStack(null).commit();
                break;
            case 1:
                fragHard = new FragHard();
                ft = getFragmentManager().beginTransaction();

                ft.replace(R.id.fragment, fragHard).addToBackStack(null).commit();
                break;
        }

    }

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

    }
});

还要确保片段的容器是一个框架布局,它将被您各自的片段替换

<FrameLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/fragment"/>