2016-04-13 5 views
1

Мое приложение падает, когда я переворачиваю ориентацию. Если пропущенная строка в onCreate работает, я вообще не могу перевернуть ориентацию. без него я могу перевернуть, но не могу изменить свое фоновое изображение, но когда он откидывается назад, он все равно падает.Ошибка приложения при изменении ориентации в android

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { 
    private DrawerLayout mDrawerLayout; 
    private ListView mListView; 
    private ImageView bgimage; 
    int[] drwables = {R.drawable.cindy, R.drawable.fred, R.drawable.kate, R.drawable.keith, R.drawable.matt, R.drawable.rickey}; 
    private ActionBarDrawerToggle toggle; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if(savedInstanceState != null){ 
      Toast.makeText(this, "made it", Toast.LENGTH_SHORT).show(); 
      int n = savedInstanceState.getInt("imageId"); 
      Toast.makeText(this, ""+n, Toast.LENGTH_SHORT).show(); 
      bgimage = (ImageView) findViewById(R.id.imgOne); 
      int[] drwables = {R.drawable.cindy, R.drawable.fred, R.drawable.kate, R.drawable.keith, R.drawable.matt, R.drawable.rickey}; 
      Toast.makeText(this, ""+drwables.length, Toast.LENGTH_SHORT).show(); 
      //This code here 
      //bgimage.setImageResource(drwables[n]); 
     } 
     else{ 
      bgimage = (ImageView) findViewById(R.id.imgOne); 
     } 
      setContentView(R.layout.activity_main); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 
      mListView = (ListView) findViewById(R.id.left_drawer); 
      mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

      String[] names = getResources().getStringArray(R.array.bandImages); 
      ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, R.layout.nav_list_row, R.id.textView, names); 
      mListView.setAdapter(itemsAdapter); 
      mListView.setOnItemClickListener(this); 


      toggle = new ActionBarDrawerToggle(this, mDrawerLayout, (Toolbar) findViewById(R.id.toolbar), R.string.open, R.string.closed) { 
       public void onDrawerClosed(View view) { 
        super.onDrawerClosed(view); 
        getSupportActionBar().setTitle(getTitle()); 
        invalidateOptionsMenu(); 

       } 

       public void onDrawerOpened(View view) { 
        super.onDrawerOpened(view); 
        getSupportActionBar().setTitle(getTitle()); 
        invalidateOptionsMenu(); 
       } 
      }; 

      mDrawerLayout.addDrawerListener(toggle); 
      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      toggle.syncState(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState){ 
     int n = Integer.parseInt(bgimage.getTag().toString()); 
     savedInstanceState.putInt("imageId", n); 
     super.onSaveInstanceState(savedInstanceState); 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     // If the nav drawer is open, hide action items related to the content view 
     boolean drawerOpen = mDrawerLayout.isDrawerOpen(mListView); 
     menu.findItem(R.id.action_about).setVisible(!drawerOpen); 
     return super.onPrepareOptionsMenu(menu); 
    } 

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


    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     bgimage = (ImageView) findViewById(R.id.imgOne); 
     bgimage.setImageResource(drwables[position]); 
     bgimage.setTag(position); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item){ 
     int id = item.getItemId(); 
     if(R.id.action_about == id){ 
      Toast.makeText(this, "Lab 2 Spring 2016, Zack G Johnson", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     else{ 
      return super.onOptionsItemSelected(item); 
     } 
    } 


} 
+1

Это потому, что ur объявляет массив int вне onCreate, поэтому сделайте это. Добавьте эту строку 'int [] drwables = {R.drawable.cindy, R.drawable.fred, R.drawable.kate, R.drawable.keith, R.drawable.matt, R.drawable.rickey}; 'после вашего super.onCreate –

+1

Также просто спрашивает, а где вы объявляете свой' setContentView() '? –

+0

Заявить, я не думаю, что на самом деле объявляю setContentView, я просто позвоню ему с моей основной деятельностью. Я довольно новичок в программировании на Android, из того, что я понимаю из api, вы просто передаете ему представление, в котором вас интересует отображение. – user3020229

ответ

0

Попробуйте установить метод setContentView перед поиском и использованием элементов макета.

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

    //put it here 
    setContentView(R.layout.activity_main); 

    if(savedInstanceState != null){ 
     Toast.makeText(this, "made it", Toast.LENGTH_SHORT).show(); 
     int n = savedInstanceState.getInt("imageId"); 
     Toast.makeText(this, ""+n, Toast.LENGTH_SHORT).show(); 
     bgimage = (ImageView) findViewById(R.id.imgOne); 
     int[] drwables = {R.drawable.cindy, R.drawable.fred, R.drawable.kate, R.drawable.keith, R.drawable.matt, R.drawable.rickey}; 
     Toast.makeText(this, ""+drwables.length, Toast.LENGTH_SHORT).show(); 
     //This code here 
     //bgimage.setImageResource(drwables[n]); 
    } 
    else{ 
     bgimage = (ImageView) findViewById(R.id.imgOne); 
    } 

    ... 
+0

Спасибо, в итоге вам пришлось сделать свое предложение и перенести объявление массива. Теперь я могу изменить источник своего изображения, но все еще пытаюсь понять, почему он падает, когда возвращается к исходной ориентации. Есть предложения? – user3020229

+1

Вы пытались использовать код из моего ответа? Просто скопируйте и вставьте его, он должен работать. Если нет, пожалуйста, покажите журнал ошибок –

+0

Пришлось переместить несколько объявлений, теперь это работает благодаря. – user3020229