2015-01-15 5 views
3

У меня есть глобальный параметр, определенный в моем классе MyApp, который используется для сброса некоторых значений во всех действиях, и я хочу установить некоторые значения по умолчанию для некоторых checkBoxes и SeekBars, но я не могу позвонить функция setDefaultvarValue в setOnclickListner(). Вот код myApp.class:Установка значения глобальной переменной на кнопке Нажмите

class MyApp extends Application { 

private int setDefault=0; 

public int getDeafultVarValue() { 
    return setDefault; 
} 

public void setDefaultVarValue(int val) { 
    setDefault = val; 
} 
} 

и setonClickListner выглядит следующим образом:

Button reset_btn = (Button) rootView.findViewById(R.id.reset_button); 
    reset_btn.setOnClickListener(new OnClickListener() { 

     ((MyApp) this.getApplication()).setDefaultVarValue(1); 


     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub    
     } 
    }); 
+0

Вы пытаетесь сделать это из другой деятельности? – samgak

+1

Вы хотите сохранить setDefault? Постоянно я хочу сказать, что вы хотите, чтобы он остался прежним, когда приложение будет запущено в следующий раз? –

+0

@samgak Я пытаюсь использовать его в меню фрагментов, который используется для установки некоторых параметров, т. Е. Минимального и максимального бюджета используемого ноутбука, который пользователь может себе позволить. –

ответ

0

Переместить эту линию ((MyApp) this.getApplication()).setDefaultVarValue(1); внутри onClick()

Так оно и должно быть:

reset_btn.setOnClickListener(new OnClickListener() {  

    @Override 
    public void onClick(View v) { 
      ((MyApp) this.getApplication()).setDefaultVarValue(1); 
    } 
}); 
3

вызовов setDefaultVarValue метод, как из MyApp класса:

@Override 
    public void onClick(View v) { 
    // TODO Auto-generated method stub  
    MyApp objMyApp = (MyApp)v.getContext().getApplicationContext(); 
    objMyApp.setDefaultVarValue(1);  
} 
+0

Спасибо за вашу помощь, tt работает очень хорошо, но как я могу называть 'getDefaultValue()' в функции, которая не имеет параметра 'View v', т.е. в классе, который выглядит так:' public AndroidSeekBar (SeekBar id1, TextView textid, int type) '{ ... } –

+0

@SahilSolanki: В методе' AndroidSeekBar' используйте 'textid' вместо' v' для вызова метода getDefaultValue() ' –

1

измените свой код к этому.

Button reset_btn = (Button) rootView.findViewById(R.id.reset_button); 
    reset_btn.setOnClickListener(new OnClickListener() {  
     @Override 
     public void onClick(View v) { 

      ((MyApp)YourActivityname.this.getApplicationContext()).setDefaultVarValue(1); 

     } 
    }); 

Если вы вызываете из своей деятельности. Замените YourActivityname с вашим Название Acitive. Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.

+0

Фактически я не использую его в активности, но в методе фрагмента, класс которого определен как этот 'public class BudgetFragment extends Fragment' –

1

Когда вы setDefaultVarValue в setOnClickListener методе setDefaultVarValue вызывается только один раз в setOnClickListener

Если вы хотите setDefaultVarValue вызывается, когда кнопка нажата, вы должны переместить его в onClick метод

0

Перемещайте метод SetDefault в OnClick метод. Тогда все должно работать нормально.

0

Либо попробуйте это сделать: ((Activity) mContext).getApplication(...) или make setDefaultVarValue метод static Это решит вашу проблему.

0

Я нашел решение. метод getter setter помог мне объявить мою переменную r, и я могу контролировать свою переменную в каждой функции. Решение, даже тот код выглядит уродливым.

private TextView broj; 
    private TextView tekst1; 
    private TextView posljednjeVrijeme; 
    String stringTStamp; 
    private int r; 

    public int getDefaultR(){ 
     return r; 
    } 

    public void setDefaultR(int r){ 
     this.r=r; 
    } 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
       /** 
       * Ponavlja radnju svakih 4 sekunde, učitava vrijeme systema 
       */ 
         final Handler ha=new Handler(); 
         ha.postDelayed(new Runnable() { 

          @Override 
          public void run() { 
           Long tStamp = System.currentTimeMillis()/1000; 
           stringTStamp = tStamp.toString(); 
           Toast.makeText(MainActivity.this, stringTStamp, Toast.LENGTH_SHORT).show(); 
           SharedPreferences preferences3 = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
           SharedPreferences.Editor editor = preferences3.edit(); 
           editor.putString("posljednjeVrijeme", stringTStamp); 
           editor.apply(); 



           ha.postDelayed(this, 4000); 
          } 
         }, 4000); 
       /** 
       * ************************************************************** 
       */ 



     broj = (TextView)findViewById(R.id.broj); 
     posljednjeVrijeme = (TextView)findViewById(R.id.posljednjeVrijeme); 

     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
     final String name = preferences.getString("vrijednost je ", ""); 
     final String name2 = preferences.getString("posljednjeVrijeme", ""); 
     if(!name.equalsIgnoreCase("")) 
     { 

      broj.setText("vrijednost je "+name); 
      posljednjeVrijeme.setText("Zadnje vrijeme "+name2); 
     } 



     Long tStamp = System.currentTimeMillis()/1000; 
     stringTStamp = tStamp.toString(); 

     if(Integer.parseInt(stringTStamp)-Integer.parseInt(name2)<10){ 
      r = 0+Integer.parseInt(name); 
      broj.setText("vrijednost je "+r); 
     } 

     else if(Integer.parseInt(stringTStamp)-Integer.parseInt(name2)>10){ 
      Toast.makeText(this, "POZDRAV GAZDA DUGO SE NE VIDJEH, UGASIO SI ME PRIJE " + (Integer.parseInt(stringTStamp)-Integer.parseInt(name2))+ " SEKUNDI" , Toast.LENGTH_SHORT).show(); 
      r = 0+Integer.parseInt(name)-10; 
      broj.setText("vrijednost je "+r); 

     }else{} 





     tekst1 = (TextView)findViewById(R.id.tekst1); 
     final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this); 
      tekst1.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        r = r+1; 


        broj.setText("vrijednost je "+r); 

        String s= String.valueOf(r); 
        SharedPreferences.Editor editor = preferences2.edit(); 
        editor.putString("vrijednost je ", s); 
        editor.apply(); 
       } 
      }); 

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