如何将 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"/>
我创建了一个 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"/>