2016-06-02 2 views
0

액티비티에 정의 된 ArrayList가있는 사용자 정의 스피너가 있습니다. 선택한 항목에서 새 단편이 작성됩니다. 내가 만든 단편 ("단일 마사지"또는 "커플 마사지")의 가치를 동일한 활동 내의 다른 단편으로 전달한 다음 그 단편에서 다른 활동으로 전달하고 텍스트보기를 업데이트 할 수 있습니까? 이것은 최선의 접근법이 아닐지 모르지만 나는 초보자이기 때문에 그다지 많이 알지 못합니다. 여기 내 코드가있다.액티비티에서 프래그먼트로 스피너 값 전달

는 회 전자 :

public class MassageActivity extends AppCompatActivity { 
private Spinner mSpinner; 
private Toolbar mToolbar; 
private FragmentManager mFragmentManager; 
private FragmentTransaction mFragmentTransaction; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_massage); 
    mToolbar = (Toolbar) findViewById(R.id.toolbar_massage); 
    setSupportActionBar(mToolbar); 
    ActionBar ab = getSupportActionBar(); 
    if (ab != null) { 
     ab.setDisplayHomeAsUpEnabled(true); 
    } 
    if (ab != null) { 
     ab.setDisplayShowTitleEnabled(false); 
    } 
    customSpinner(); 

    mFragmentManager = getSupportFragmentManager(); 
}private void customSpinner() { 
    final ArrayList<String> massageType = new ArrayList<>(); 
    massageType.add("Single Massage"); 
    massageType.add("Couples Massage"); 
    massageType.add("Pamper Party"); 
    mSpinner = (Spinner) findViewById(R.id.spinner); 

    CustomSpinnerAdapter spinnerAdapter = new CustomSpinnerAdapter(getApplicationContext(), massageType); 
    mSpinner.setAdapter(spinnerAdapter); 

    mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      if (parent.getItemAtPosition(position).toString() 
        .equals("Pamper Party")) { 
       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.fragment_container_massage, 
         new PamperPartyFragment()).commit(); 
      } 
      if (parent.getItemAtPosition(position).toString() 
        .equals("Single Massage")) { 
       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.fragment_container_massage, 
         new SingleMassageFragment()).commit(); 
      } 
      if (parent.getItemAtPosition(position).toString() 
        .equals("Couples Massage")){ 
       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.fragment_container_massage, 
         new CouplesMassageFragment()).commit(); 
      } 

     } 

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

     } 
    }); 

}} 

는 편집 : 내가 선택한

MassageActivity activity = (MassageActivity) getActivity(); 
    Intent f = activity.getIntent(); 
    String spinnerValue = f.getStringExtra("spinnerValue"); 
    Utils.doToast(getContext(), spinnerValue); 

그러나 어느 조각 : 이 난을 따라 이런 짓을 : 내 조각에서 다음

String spinnerValue = mSpinner.getSelectedItem().toString(); 
    Intent i = new Intent(this, SingleMassageFragment.class); 
    i.putExtra("spinnerValue", spinnerValue); 
    setIntent(i); 

과 항상 동일한 토스트 "싱글 마사지"를 받으십시오. 왜 그런가요?

public class CustomSpinnerAdapter extends BaseAdapter { 
private Context mContext; 
private ArrayList<String> mMassageType; 
private LayoutInflater mInflater; 
private TextView tvSpinner; 

public CustomSpinnerAdapter(Context context, ArrayList<String> massageType) { 
    mContext = context; 
    mMassageType = massageType; 
    mInflater = (LayoutInflater.from(context)); 
} 

@Override 
public int getCount() { 
    return mMassageType.size(); 
} 

@Override 
public Object getItem(int position) { 
    return mMassageType.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return (long) position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    convertView = mInflater.inflate(R.layout.spinner_layout, null); 
    tvSpinner = (TextView) convertView.findViewById(R.id.tvSpinner); 
    tvSpinner.setText(mMassageType.get(position)); 
    return convertView; 
} 

}

답변

1

Bundle bundle = this.getArguments(); 
int myInt = bundle.getInt(key, defaultValue); 

시도 티 단편의 데이터를 얻기 위해 데이터

PamperPartyFragment mPamperPartyFragment = new PamperPartyFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putInt(key, value); 
    mPamperPartyFragment.setArguments(bundle); 

mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.fragment_container_massage, 
         mPamperPartyFragment ).commit(); 

합격 : 어떤 경우 여기를 내 어댑터의 당신의 회 전자 setOnItemSelectedListener에서의 당신의 조각에서 데이터가 onCreate

Bundle bundle = getArguments(); 
    String selectedVAlue = bundle.getString("spinnerValue"); 
+0

또한 전달할 수 문자열/부울 등 데이터 유형 –

+0

감사이 추가 읽을 수있는 데이터

Bundle bundle = new Bundle(); bundle.putString("spinnerValue",parent.getItemAtPosition(position).toString()); mPamperPartyFragment.setArguments(bundle); mFragmentTransaction = mFragmentManager.beginTransaction(); mFragmentTransaction.replace(R.id.fragment_container_massage, mPamperPartyFragment ).commit(); 

을 보내 당신의 대답을 위해서! 3 개의 조각 중 하나가 스피너에서 선택된 값을 위의 3 가지와 다른 다른 조각으로 전달하고 싶습니다. 그게 가능하니? – jlively

+0

@jlively 예 u 다른 조각으로 데이터를 전달할 수 있습니다 –

1
in activity : 

Intent i = new Intent (this, fragmentname.class); 
i.putInt(key, value); 
setIntent(i); 

in fragment : 

ActivityName activity = (ActivityName) getActivity(); 
Intent f= activity.getIntent();  
int yrid = f.getIntExtra(key); 
+0

이 방법이 효과적이지만 몇 가지 지침이 필요합니다. 'string spinnerValue = mSpinner.getSelectedItem(). toString(); ' 의도 i = 새로운 의도 (this, CouplesMassageFragment.class); i.putExtra ("spinnerValue", spinnerValue); setIntent (i);' 그리고 내 조각에 : 'MassActivity activity = (MassageActivity) getActivity(); 의도 f = activity.getIntent(); 문자열 spinnerValue = f.getStringExtra ("spinnerValue"); Utils.doToast (getContext(), spinnerValue); ' 그러나 건배는'단일 마사지 '라고 말합니다. – jlively

관련 문제