Java 无法访问侦听器内的变量
下面我有一段听众摘录,其中包含了变量degreeJava 无法访问侦听器内的变量,java,android,Java,Android,下面我有一段听众摘录,其中包含了变量degree public class CustomOnItemSelectedListener implements AdapterView.OnItemSelectedListener { //Define Components public EditText text; public Spinner spinner1; //Define Variables public String degree; pu
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";
}
在我的主要活动中
protected void onCreate(Bundle savedInstanceState) {
[...]
myPager = new MyPagerAdapter(getSupportFragmentManager());
selectedListener = new CustomOnItemSelectedListener();
addListenerOnSpinnerItemSelection();
myPager.selectedListener = selectedListener;
}
我遇到的问题是,我无法访问度变量。如果我在listener类的顶部设置变量的值,如下所示
public String degree = "jobby";
然后我可以访问变量
我试图在侦听器中编写一个if语句,根据选择的微调器项,变量会发生变化
如何访问listener类中的变量?我认为这是因为需要初始化变量,请尝试以下操作:
public String degree = null;
并确保使用变量时其值正确,以避免出现NullPointerException。在CustomOnItemSelectedListener中,onItemSelected需要使用活动的FragmentManager替换片段 请参阅(向下滚动至
showDetails()
方法)。但是,您应该使用FragmentManager#findframentbyid
而不是FragmentManager#findframentbytag
也许是这样的:
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();
但是要小心,如果
程度变化很大,那么这将导致FragmentManger中包含许多片段。在这种情况下,您应该根据需要删除未使用的片段。出现了什么错误?selectedListener应该是CustomOnItemSelectedListener类型,不是吗?没有错误。它构建和运行良好,只是不输出变量内容。@Arju yes-这是在我的主类中定义的:selectedListener=new CustomOnItemSelectedListener();好的,让字符串是静态的,并确保您使用相同的insatnce of object来访问字符串。我很确定这不重要,否则所有变量都必须初始化为null。不过我要试试看!另一个是初始化的,当你在同一个类的变量中放入一个值,在设置任何值之前尝试使用该变量的一个值,你会得到一个错误。这是相同的,其他类没有在变量中设置任何值,它正在尝试使用变量的值。将其设置为null后仍然不会返回设置的值。即使没有它,我也不会得到任何NullPointerException
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();