2016-03-25 23 views
0

bu aktivitelerin onPostResume bu aktivitelerin çocuk sınıflarında setContentView(R.layout.activity_method_two);'dan sonra gerçekleşmesi. Ama ben her zaman java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RadioButton.setChecked(boolean)' on a null object reference olsunonPostReil soyut sınıfta null ContentGrup nesnesinde çocuk sınıfındaki inCreate oluşturulmasından sonra

Bunu neden yapamıyorum?

public class MethodTwo extends AbstractMethod { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_method_two); 
    } 

    @Override 
    void set_default_method() { 
     rb_default = (RadioButton) findViewById(R.id.radio_button_method_two); 
    } 

} 

ve

public abstract class AbstractMethod extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener { 
    RadioGroup rg_method; 
    RadioButton rb_default; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     set_default_method(); 
    } 

    @Override 
    protected void onPostResume() { 
     super.onPostResume(); 

     rb_default.setChecked(true); 

     rg_method = (RadioGroup) findViewById(R.id.radio_group_method_select); 
     rg_method.setOnCheckedChangeListener(this); 
    } 

yığın izleme bir hata üretir:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RadioButton.setChecked(boolean)' on a null object reference 

(Sadece super.oncreate() sonra) arka sınıfta onCreate içine setContentView hareket durumunda, çalışır .. ama sonra çoklu çocuk sınıfları için soyut bir dersim yok.

+0

eser olmalıdır bu

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(); setContentView(getContentId()); } 

gibi soyut sınıfından onCreate() kimseyi arama R.layout.activity_method_two); 'soyut sınıfta olur? – newhouse

+0

Sadece geri dönüyordum, hatırlatarak bu açıklamaya eklemeyi unuttum :) –

+1

[Bu yanıt] (http://stackoverflow.com/a/29953146/1435985) olası bir çözümdür. "SetContentView" öğesini soyut sınıfa taşıyın ve uygulama sınıflarının düzen kimliğini sağlamak için bir yöntemi geçersiz kılın. –

cevap

1

böyle soyut bir yöntem oluşturun:

abstract int getContentId(); 

Ve (siz `setContentView koyarsanız Bu

+0

teşekkürler, bunu yaptı. Aslında, on thePostResume'ye taşıdığım tüm şeyler onCreate'a geri dönemez. –

+0

bu yüzden biraz daha düşündüm ve açıkçası, hala kafam karıştı. Neden _call_ 'setContentView' için soyut sınıfta olması gerekiyor? Bu tavsiyeyi ve _move_'i orada takip edersem, çocuk sınıfında değil, o zaman neden rb_default' orada çalışmaya devam ediyor? ya da çocuk derslerinde işe yarayacaksa, neden onu soyut sınıfa taşımam gerekiyordu? –