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

时间:2013-11-22 11:08:22

标签: java android

下面有一个听众摘录,其中包含可变度。

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语句,并且根据选择的微调器项,变量会发生变化。

如何在侦听器类中访问变量?

2 个答案:

答案 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中包含许多碎片。在这种情况下,您应该根据需要删除未使用的碎片。