下面有一个听众摘录,其中包含可变度。
public class CustomOnItemSelectedListener implements AdapterView.OnItemSelectedListener {
//Define Components
public EditText text;
public Spinner spinner1;
//Define Variables
public String degree;
public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
//Set the selected item on spinner1 to the variable tempValue
String tempValue = spinner1.getSelectedItem().toString();
degree = "jobby";
}
我试图在我的ViewPager适配器中访问该变量,如下所示:
public class MyPagerAdapter extends FragmentPagerAdapter {
public CustomOnItemSelectedListener selectedListener;
[...]
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return resultFragment.newInstance(selectedListener.degree);
case 1: return resultFragment.newInstance("resultFragment, Instance 2");
default: return resultFragment.newInstance("resultFragment, Default");
}
}
[...]
}
在我的MainActivity中
protected void onCreate(Bundle savedInstanceState) {
[...]
myPager = new MyPagerAdapter(getSupportFragmentManager());
selectedListener = new CustomOnItemSelectedListener();
addListenerOnSpinnerItemSelection();
myPager.selectedListener = selectedListener;
}
我遇到的问题是我无法访问学位变量。如果我将变量的值设置在监听器类的顶部,如此
public String degree = "jobby";
然后我可以访问变量。
我正在尝试在侦听器中编写if语句,并且根据选择的微调器项,变量会发生变化。
如何在侦听器类中访问变量?
答案 0 :(得分:0)
我认为这是因为你需要初始化变量,试试这个:
public String degree = null;
并确保在使用具有正确值的变量时,尝试避免使用NullPointerExceptions。
答案 1 :(得分:0)
在CustomOnItemSelectedListener#onItemSelected中,需要使用Activity的FragmentManager替换片段。
请参阅Fragment example code(向下滚动到showDetails()
方法)。但是,您应该使用FragmentManager#findFragmentById
而不是FragmentManager#findFragmentByTag
。
也许是这样的:
FragmentManager fragManager = getFragmentManager();
FragmentTransaction xact = fragManager.beginTransaction();
ResultFragment resultFragment = (ResultFragment)fragManager.findFragmentByTag(selectedListener.degree);
if(resultFragment == null) {
mList = resultFragment.newInstance(selectedListener.degree);
xact.add(R.id.view_container, resultFragment, selectedListener.degree);
}
xact.commit();
但要小心,如果degree
变化很大,那么这将导致FragmentManger中包含许多碎片。在这种情况下,您应该根据需要删除未使用的碎片。