Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法访问侦听器内的变量_Java_Android - Fatal编程技术网

Java 无法访问侦听器内的变量

Java 无法访问侦听器内的变量,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

下面我有一段听众摘录,其中包含了变量degree

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