2014-01-20 6 views
0

Я пытаюсь изменить проект, содержащий код для создания панели действий. То, как укладка происходит то, что в каждом FragmentActivity следующий код существует:Использование BaseActivity для OnResume Action Bar Styling

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    actionbarcolor = PreferenceData.getIntValues(AddJournalEntry.this, 
      "actionbarcolor"); 
    if (actionbarcolor == 1) { 
     ActionBar actionBar = getActionBar(); 
     actionBar.setBackgroundDrawable(new ColorDrawable(Color.BLUE)); 
     actionBar.setDisplayShowTitleEnabled(false); 
     actionBar.setDisplayShowTitleEnabled(true); 
    } else if (actionbarcolor == 2) { 
     ActionBar actionBar = getActionBar(); 
     actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED)); 
     actionBar.setDisplayShowTitleEnabled(false); 
     actionBar.setDisplayShowTitleEnabled(true); 
    } 
} 

Я хочу, чтобы создать новый базовый фрагмент класс активности, который имеет этот код в нем так, что для каждого экрана не нужно копировать/вставить/обновить этот код. я бы просто расширил его для других экранов. Я создал новый класс так:

package com.fasttracksites.skyrimjournal; 

import android.app.ActionBar; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.support.v4.app.FragmentActivity; 

import com.fasttracksites.adapters.PreferenceData; 

public class BaseActivity extends FragmentActivity { 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     actionbarcolor = PreferenceData.getIntValues(AddJournalEntry.this, 
       "actionbarcolor"); 
     if (actionbarcolor == 1) { 
      ActionBar actionBar = getActionBar(); 
      actionBar.setBackgroundDrawable(new ColorDrawable(Color.BLUE)); 
      actionBar.setDisplayShowTitleEnabled(false); 
      actionBar.setDisplayShowTitleEnabled(true); 
     } else if (actionbarcolor == 2) { 
      ActionBar actionBar = getActionBar(); 
      actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED)); 
      actionBar.setDisplayShowTitleEnabled(false); 
      actionBar.setDisplayShowTitleEnabled(true); 
     } 
    } 

} 

Единственная проблема, которую я вижу, что мне нужно, чтобы быть в состоянии передать контекст текущего экрана, можно ли это сделать, или я должен сделать что-то другой?

+2

Почему вы не просто извлекаете стиль панели действий в XML-ресурс? Вот пример: http://developer.android.com/training/basics/actionbar/styling.html. Это будет держать ваш код немного чище, поскольку весь стиль будет в XML-файле вместо ваших java-файлов. – kformeck

ответ

1

Вам не нужно иметь контекст текущего экрана, вы можете просто использовать «это». Если у вас есть код в родительском классе, ссылка на себя одинакова в родительском и дочернем. Вы можете обновить свой код следующим образом:

public class BaseActivity extends FragmentActivity { 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
      //Removed the AddJournalEntry before this 
     actionbarcolor = PreferenceData.getIntValues(this, 
       "actionbarcolor"); 
     if (actionbarcolor == 1) { 
      ActionBar actionBar = getActionBar(); 
      actionBar.setBackgroundDrawable(new ColorDrawable(Color.BLUE)); 
      actionBar.setDisplayShowTitleEnabled(false); 
      actionBar.setDisplayShowTitleEnabled(true); 
     } else if (actionbarcolor == 2) { 
      ActionBar actionBar = getActionBar(); 
      actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED)); 
      actionBar.setDisplayShowTitleEnabled(false); 
      actionBar.setDisplayShowTitleEnabled(true); 
     } 
    } 

} 

Вы также можете использовать стиль в xml. Если вы хотите быстро начать стиль, я бы очень рекомендовал использовать Android Asset Studio Action Bar Style Generator. Это отличный инструмент для создания необходимых файлов стиля и ресурсов для панели действий. Обязательно просмотрите файлы, которые он генерирует, чтобы ознакомиться с тем, как стилизовать панель действий с помощью xml.