2013-06-03 5 views
0

Я делаю приложение, в котором я хочу, чтобы пользователь имел другие виды в портретном режиме, чем в ландшафтном режиме. Итак, я сделал 1 обычный xml-файл, а затем сделал еще один, на котором я подписал при создании xml-файла, который предназначен для ландшафтного режима. Таким образом, autocaly была создана дополнительная папка с именем layout-land, в которой находится новый xml-файл (с тем же именем, что и старый).Ошибка ландшафтного режима

Но всякий раз, когда я запускаю свое приложение в ландшафтном режиме, он сбой (xml-файл для MainActivity.java)?

Моего XML-файл для ландшафтного режима: выход

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

    <TextView 
     android:id="@+id/landscape1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="Houd uw telefoon rechtop en herstart de app voor correcte weergave" 
     android:textColor="#665252" /> 

</RelativeLayout> 

Logcat:

06-03 19:22:14.664: D/AndroidRuntime(285): Shutting down VM 

06-03 19:22:14.664: W/dalvikvm(285): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 

06-03 19:22:14.684: E/AndroidRuntime(285): FATAL EXCEPTION: main 

06-03 19:22:14.684: E/AndroidRuntime(285): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rome/com.example.rome.MainActivity}: 
java.lang.NullPointerException 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.os.Handler.dispatchMessage(Handler.java:99) 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.os.Looper.loop(Looper.java:123) 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.app.ActivityThread.main(ActivityThread.java:4627) 

06-03 19:22:14.684: E/AndroidRuntime(285): at java.lang.reflect.Method.invokeNative(Native Method) 

06-03 19:22:14.684: E/AndroidRuntime(285): at java.lang.reflect.Method.invoke(Method.java:521) 

06-03 19:22:14.684: E/AndroidRuntime(285): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 

06-03 19:22:14.684: E/AndroidRuntime(285): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 

06-03 19:22:14.684: E/AndroidRuntime(285): at dalvik.system.NativeStart.main(Native Method) 

06-03 19:22:14.684: E/AndroidRuntime(285): Caused by: java.lang.NullPointerException 

06-03 19:22:14.684: E/AndroidRuntime(285): at com.example.rome.MainActivity.onCreate(MainActivity.java:21) 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 

06-03 19:22:14.684: E/AndroidRuntime(285): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

06-03 19:22:14.684: E/AndroidRuntime(285): ... 11 more 

Mainactivity.java:

package com.example.rome; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.EditText; 
import android.widget.Button; 
import android.view.View; 
import android.widget.Toast; 
import android.content.Intent; 
import android.view.MenuInflater; 
import android.view.MenuItem; 


public class MainActivity extends Activity implements View.OnClickListener{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    findViewById(R.id.imageButton1).setOnClickListener(this); 
    findViewById(R.id.imageButton2).setOnClickListener(this); 
    findViewById(R.id.imageButton3).setOnClickListener(this); 
    findViewById(R.id.imageButton4).setOnClickListener(this); 
    findViewById(R.id.imageButton5).setOnClickListener(this); 
    findViewById(R.id.imageButton6).setOnClickListener(this); 
    findViewById(R.id.imageButton7).setOnClickListener(this); 
    findViewById(R.id.imageButton8).setOnClickListener(this); 
    findViewById(R.id.imageButton9).setOnClickListener(this); 



} 


    @Override 
    public void onClick(View v){ 
     switch(v.getId()){ 
     case R.id.imageButton1: 
      startActivity(new Intent(MainActivity.this, Metros.class)); 
      break; 
     case R.id.imageButton2: 
      startActivity(new Intent(MainActivity.this, Programma.class)); 
      break; 
     case R.id.imageButton8: 
       startActivity(new Intent(MainActivity.this, Italiaans.class)); 
       break; 
     //-- more cases -- 
     case R.id.imageButton9: 
       startActivity(new Intent(MainActivity.this, Telefoonnummers.class)); 
       break; 
     case R.id.imageButton7: 
       startActivity(new Intent(MainActivity.this, Kaart.class)); 
       break; 
     case R.id.imageButton5: 
       startActivity(new Intent(MainActivity.this, Restaurants.class)); 
       break; 
     case R.id.imageButton3: 
       startActivity(new Intent(MainActivity.this, Bus.class)); 
       break; 
     case R.id.imageButton4: 
       startActivity(new Intent(MainActivity.this, Winkelen.class)); 
       break; 
     case R.id.imageButton6: 
       startActivity(new Intent(MainActivity.this, Syllabus.class)); 
       break; 
     } 
    } 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.Over: 
    startActivity(new Intent(this, Over.class)); 
    return true; 
    case R.id.Hotels: 
    startActivity(new Intent(this, Hotels.class)); 
    return true; 
    default: 
    return super.onOptionsItemSelected(item); 
    } 
} 


} 

activity_main.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:background="#0B0E15" 
android:gravity="center_horizontal" 
tools:context=".MainActivity" > 

<ImageButton 
    android:id="@+id/imageButton1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textView1" 
    android:layout_centerHorizontal="true" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/metro2" /> 

<ImageButton 
    android:id="@+id/imageButton2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textView1" 
    android:layout_toLeftOf="@+id/imageButton1" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/programma" /> 

<ImageButton 
    android:id="@+id/imageButton3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/imageButton1" 
    android:layout_toRightOf="@+id/imageButton1" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/bus2" /> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="18dp" 
    android:height="20dp" 
    android:textColor="#FFFFFF" 
    android:width="175dp" /> 

<ImageButton 
    android:id="@+id/imageButton4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/imageButton1" 
    android:layout_toLeftOf="@+id/imageButton3" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/supermarkt2" /> 

<ImageButton 
    android:id="@+id/imageButton5" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/imageButton2" 
    android:layout_below="@+id/imageButton2" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/restaurants2" /> 

<ImageButton 
    android:id="@+id/imageButton6" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/imageButton4" 
    android:layout_toRightOf="@+id/imageButton4" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/syllabus2" /> 

<ImageButton 
    android:id="@+id/imageButton7" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/imageButton4" 
    android:layout_toLeftOf="@+id/imageButton6" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/kaartrome2" /> 

<ImageButton 
    android:id="@+id/imageButton8" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/imageButton6" 
    android:layout_alignTop="@+id/imageButton7" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/italiaans2" /> 

<ImageButton 
    android:id="@+id/imageButton9" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/imageButton7" 
    android:layout_toLeftOf="@+id/imageButton7" 
    android:minHeight="100dp" 
    android:minWidth="100dp" 
    android:src="@drawable/telefoon2" /> 

    <TextView 
     android:id="@+id/Streeptop" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/textView1" 
     android:layout_alignBottom="@+id/textView1" 
     android:layout_centerHorizontal="true" 
     android:text="______________________________________________" 
     android:textColor="#FFFFFF" /> 

    <TextView 
     android:id="@+id/Streep" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/Streeptop" 
     android:layout_below="@+id/imageButton7" 
     android:text="_______________________________" 
     android:textColor="#FFFFFF" /> 

</RelativeLayout> 

Можете ли вы мне помочь?

Спасибо заранее, Ide

+0

Можете ли вы разместить логарифм, когда он сработает? – codeMagic

+0

Можете ли вы разместить вывод Logcat для сбоя? И чтобы уточнить, у вас есть два XML-файла с именем «xml-file.xml», один в папке макета и один в папке-макете? Кроме того, у вашего RelativeLayout отсутствует открывающий тег <<", хотя я сомневаюсь, что это ваша проблема, возможно, ошибка с копией. – MattDavis

+0

У меня есть два файла с именем activity_main.xml. Открывающий тег - это copy-paste miscue yes. Я дам logcat сейчас: – Ide

ответ

0

Следующее видео с конференции разработчиков Android показывает примеры микро и макро оплавления (начинается примерно 11 мин). http://www.youtube.com/watch?v=Jl3-lzlzOJI

Для основной макро-оплавления (аки земли против портрета) вы хотите иметь:

-The вид портрета в файле: Реза/макет/your_xml_file.xml

-The пейзажных в файле: res/layout-land/your_xml_file.xml

Thats 2 файла с тем же именем в двух отдельных папках. Кажется, что ничего не вырезает ваш xml-код.

+0

У меня есть то, что вы говорите, и теперь я даже переместил свой портретный файл в res/layout/layout-port, а в портретном режиме все в порядке, но в ландшафте приложение все еще падает. – Ide

0

Проблема в том, что вы устанавливаете onClickListener для всех этих Buttons, которые, судя по всему, не существуют в ландшафтной ориентации. Вам нужно поставить галочку там либо если Buttons являются null не установить слушатель или еще лучше проверить, какой layout надуваются или какая ориентация устройство в.

Я мог бы привести примеры делать выше, однако , поскольку вы используете один и тот же прослушиватель для всех Buttons, вероятно, было бы проще установить onClick в файле портрета xml. Для каждого Button сделать что-то вроде

<Button 
    android:id="@+id/imageButton1" 
    android:onClick="functionName" 

затем в коде Java просто имя onClick на то, что вы использовали в XML, и вы не должны установить эти слушателей в onCreate().Таким образом, вам не нужно будет implements View.OnClickListener и мог вывезти все

findViewById(R.id.imageButton1).setOnClickListener(this); 

This SO answer of mine может помочь сделать создавая Intents более эффективным. Мне это нравится, но может быть или не быть для вас.

+0

Но тогда это не вызывает никаких проблем, что в разделе @override под ним у меня есть код с кодом r.id ....... и т. Д. ......? – Ide

+0

Теперь ссылки (намерения) рушится? – Ide

+0

'switch' все равно будет работать. У вас есть отдельная проблема, если ваши «намерения» не работают. Раньше они работали? – codeMagic

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