2013-11-22 3 views
0

У меня есть выдержка для слушателя, ниже которой находится переменная степень.Невозможно получить доступ к переменной внутри слушателя

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

какая у вас ошибка? – Blackbelt

+0

selectedListener должен быть типа CustomOnItemSelectedListener, не так ли? –

+0

Ошибка отсутствует. Он строит и работает нормально, он просто не выводит содержимое переменной. – Xeo

ответ

0

Я думаю, это потому, что вам нужно инициализировать переменную, попробуйте следующее:

public String degree = null; 

И убедитесь, что при использовании переменной это правильное значение, чтобы попытаться избежать NullPointerExceptions.

+0

Я уверен, что это не имеет значения, иначе все переменные должны быть инициализированы как null. Я попробую! – Xeo

+0

Другие инициализируются при добавлении значения в переменную того же класса, попробуйте использовать значение переменной перед установкой любого значения, вы получите сообщение об ошибке. Это то же самое, другие классы не устанавливают значения в переменной и пытаются использовать значение переменной. –

+0

Установка этого значения в значение null еще не вернула значение, установленное позже. Даже без этого я не получаю никаких NullPointerExceptions – Xeo

0

В CustomOnItemSelectedListener # onItemВыбран фрагмент необходимо заменить с помощью FragmentManager Activity.

См. 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. В этом случае вы должны удалить неиспользуемые фрагменты по мере необходимости.

Смежные вопросы