2015-01-02 5 views
0

Я сделал простое приложение, потому что я только начинаю с android. Я сделал кнопку, чтобы изменить макет, но после тестирования он каждый раз сбрасывает приложение. вот мой кодXML change Layout button crashing app

package nathanschmidt.nathan; 


    import android.support.v7.app.ActionBarActivity; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.widget.NumberPicker; 
    import android.widget.TextView; 
    import android.graphics.Color; 
    import android.content.Intent; 
    import android.widget.Button; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
public class MainActivity extends ActionBarActivity { 
TextView numberView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    numberView = (TextView) findViewById(R.id.numberview); 
    NumberPicker numberPicker = (NumberPicker) findViewById(R.id.numberPicker); 
    numberPicker.setMaxValue(10); 
    numberPicker.setMinValue(0); 
    numberPicker.setWrapSelectorWheel(true); 
    numberPicker.setOnValueChangedListener(
      new NumberPicker.OnValueChangeListener() { 
       @Override 
       public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 

        int color; 
        if (newVal < 1) { 
         color = Color.parseColor("#000000"); 
        } else if (newVal < 2) { 
         color = Color.parseColor("#01093B"); 
        } else if (newVal < 3) { 
         color = Color.parseColor("#000C57"); 
        } else if (newVal < 4) { 
         color = Color.parseColor("#000F73"); 
        } else if (newVal < 5) { 
         color = Color.parseColor("#00128a"); 
        } else if (newVal < 6) { 
         color = Color.parseColor("#00159E"); 
        } else if (newVal < 7) { 
         color = Color.parseColor("#0017B0"); 
        } else if (newVal < 8) { 
         color = Color.parseColor("#001AC4"); 
        } else if (newVal < 9) { 
         color = Color.parseColor("#001FE8"); 
        } else { 
         color = Color.parseColor("#0022FF"); 
        } 

        numberView.setTextColor(color); 

       } 
      }); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.about); 

    // Watch for button clicks. 
    Button button = (Button)findViewById(R.id.change); 
    button.setOnClickListener(submitListener); 
} 

private OnClickListener submitListener = new OnClickListener() { 
    public void onClick(View v) { 

    } 
}; 

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" 
android:background="@drawable/os2"> 


<TextClock 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/numberview" 
    android:textSize="100dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentStart="true" /> 

<NumberPicker 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/numberPicker" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentEnd="true"/> 


<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="change" 
    android:id="@+id/change" 
    android:layout_below="@+id/numberPicker" 
    android:layout_centerHorizontal="true" /> 

+1

Опубликовать трассировку стека аварии –

+0

Почему вы дважды задаете свой контент? Также: почему вы меняете его с одного макета на другой? – DigCamara

+0

Я думал, что если бы я мог это сделать, я бы просто изменил дизайн. если есть способ изменить xml нажатием кнопки. – NathanAD

ответ

0

Что врезаться на самом деле эти две строки кода

super.onCreate(savedInstanceState); 
setContentView(R.layout.about); 

Вы здесь призывающие onCreate() метод Activity класс дважды, который не является хорошей практикой в все и вы меняете макет в методе setContentView(), а затем, когда вы используете numberView, вы инициализировали из макета activity_main, в то время как ваш текущий макет около. Мне интересно, что вы делали Exception, это NullPointerException или IllegalStateException.

+0

Это сработало! Благодаря! Теперь мне интересно, как сделать эти макеты изменений. Это возможно? – NathanAD

+0

Это возможно, но когда вы вызываете 'setContentView()', вы раздуваете новый макет для этой операции, поэтому вам нужно повторно инициализировать свои представления (кнопки, текстовые ...) и не использовать какой-либо вид, который инициализирован из макет, который вы не устанавливаете прямо сейчас. –