2012-01-08 18 views
7

SetContentView öğesini oncreate metodu dışında ayarlayabileceğinizi söyleyen pek çok insan gördüm, ancak bir örnek bulamadım. Şimdi setContentView kullanmaya çalıştığımda, uygulamam çöküyor.SetContentView öğesini oncreate yönteminin dışında kullanabilir miyim?

AlarmActivity.java:

package com.alarm.example; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.Button; 
import android.widget.RelativeLayout; 

public class AlarmActivity extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Button buton = new Button(this); 
     buton.setId(101); 
     buton.setText("New alarm"); 
     buton.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
     RelativeLayout layout1 = new RelativeLayout(this); 
     layout1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    layout1.addView(buton); 
    setContentView(layout1); 

    Button nou =(Button)findViewById(101); 
    nou.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      New_ala nou1=new New_ala(); 
      nou1.nou_alarma(); 
      } 
     }); 
    } 
} 

New_ala.java:

package com.alarm.example; 

public class New_ala extends AlarmActivity{ 
public void nou_alarma() { 
setContentView(R.layout.timepicker);   
} 
} 

TimePicker.xml: Daha fazla ayrıntı üzerinde

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 


    <TimePicker 
     android:id="@+id/timePicker" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

    <LinearLayout 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:layout_alignParentBottom="true"> 

     <Button 
     android:id="@+id/picker_save" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Save"> 
     </Button> 

     <Button 
     android:id="@+id/picker_cancel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Cancel"> 
     </Button> 
</LinearLayout> 

</LinearLayout> 

, ben kullanabilirsiniz İşte benim kaynak kodu setContentView (R.layout.timepicker) herhangi bir problem olmadan oncreate metodu içerisinde setContentView çalışmıyor. New_ala.java sınıfının içinde düzgün bir şekilde. Biri bana yardım edebilir mi?

niyet ayarladıktan sonra kodu: AlarmActivity:

package com.alarm.example; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
public class AlarmActivity extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startActivity(new Intent(this, NewAlarmActivity.class)); 
     } 
    } 

NewAlarmActivity:

package com.alarm.example; 
import android.os.Bundle; 
public class NewAlarmActivity extends AlarmActivity{ 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.timepicker); 
} 
    } 
+1

"Uygulamam sadece çöküyor" Lütfen LogCat'i istisna ile gönderin – Guillaume

cevap

3

Bunu yapmanın en iyi yolu, birden fazla etkinliğe sahip olmaktır: yerine nou1.nou_alarma(); bir niyet oluşturmak ve yeni düzen ile yeni bir etkinlik başlat.

startActivity(new Intent(this, NewAlarmActivity.class)); 

ve NewAlarmActivity arasında onCreate yöntemde

, setContentView() yöntem yalnızca etkinliği başına bir kez çağrılabilir R.layout.timepicker

+0

Cevabınız için teşekkürler. Yeni aktiviteyi yarattım ama programı emülatörde çalıştırdığımda ekran siyahlaşıyor ve hiçbir şey olmuyor. Bu kod düzenleme sonrası – vicciu

+0

sorumluluğudur. Eğer bir çökmeyi araştırmamızı isterseniz, LogCat'in içeriğini göndermeniz gerekiyor, bu istisnai durumu gösterir. – Guillaume

+0

Problemi buldum. Program her zaman siyahtı çünkü yeni niyete başlamak için bir koşul yoktu ve yeni niyet başladıktan hemen sonra ana yönteme geri döndü ve böyle devam etti. Şimdi problemi çözdüm ve harika çalışıyor. Çok teşekkürler. – vicciu

-4

içerik görünümü ayarlayın. Düzeni bir noktada tamamen değiştirmek isterseniz, ViewFlipper'a gidin ya da etkinlikte 2 düzeniniz olmalı ve sırasıyla view.setVisibility(View.GONE); ve view.setVisibility(View.VISIBLE);'u arayarak bunlardan yalnızca birini gösterin.

+11

İlk bölüm sadece yanlıştır. 'setContentView', rasgele bir sayı olarak çağrılabilir. –

9

Olay (UI) dizesinde her çalıştırdığınızda setContentView öğesini arayabilirsiniz. Yaptığınız zaman, findViewById numaralı telefonu arayarak başlattığınız alanların sıfırlanması gerektiğini unutmayın.

İlgili konular