2017-02-08 10 views
1

私は1つのスピナーを取ったアクティビティを作成しました。今度は、スピナー内の選択した項目のデータ(文字列名または位置int)を1つのlistFragmentに渡したいとします。私はBundleとgetActivity()をフラグメントに使用しようとしましたが、データは渡されません。私はこれが未熟だが、私はAndroidプログラミングの初心者です。ありがとうございました! アクティビティからSpinnerのデータまたは位置をListFragmentに渡す方法

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

     } 
    }); 
+1

フラグメントトランザクションの 'setArgument()'メソッドについて読む –

答えて

0

まず活動のバンドル作成(PS Iは2つのスピナーを切り替えることだけでなく、ラジオ・グループを使用している):

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

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

をそして、これが機能するためにあなたのフラグメントは、としてバンドルを取得する必要がありパラメータはonCreateViewです。あなたがバンドルを必要としない場合は、バンドルが空であるかどうかを言うことができます。そして、この部分や他に必要なことをしないでください。

@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(); 

Good Luck!

+1

ありがとうございました – vrax

0

あなたのフラグメントコンストラクターでスピナー選択項目をこのように渡すこともできます。

あなたはこのようなあなたのスピナー値に基づいてフラグメントを追加したり、置き換えることができ
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) { 

     } 
    }); 
0

:また、フラグメントのコンテナがあなたのそれぞれのフラグメント

に置き換えられますでframeLayoutであることを確認して

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"/> 
+0

ありがとうフレームレイアウトが動作しました – vrax

関連する問題