Наследование методов с контекстами в деятельности - PullRequest
1 голос
/ 23 сентября 2011

У меня есть базовый класс, в котором есть несколько кнопок, которые будут использоваться во всех моих действиях в качестве общей панели навигации.

public abstract class GenericActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_menu);

    final Button buttonFinder = (Button) findViewById(R.id.buttonNavigationFinder);
    buttonFinder.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent IndexActivity = new Intent(GenericActivity.this, Finder.class);     
            GenericActivity.this.startActivity(IndexActivity);
        }
    });

    final Button buttonIndex = (Button) findViewById(R.id.buttonNavigationIndex);
    buttonIndex.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent IndexActivity = new Intent(GenericActivity.this, Index.class);     
            GenericActivity.this.startActivity(IndexActivity);
        }
    });

    final Button buttonStart = (Button) findViewById(R.id.buttonNavigationStart);
    buttonStart.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent IndexActivity = new Intent(GenericActivity.this, MainMenu.class);     
            GenericActivity.this.startActivity(IndexActivity);
        }
    });       
}
}

Затем я наследую эту деятельность в другой деятельности

public class Index extends GenericActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.index);
}
}

XML-файл макета индекса имеет кнопки с теми же идентификаторами, что и базовый класс. Когда я запускаю индексную активность, мой эмулятор падает. Помогите!

РЕДАКТИРОВАТЬ: Stacktrace, но я не могу получить весь след. Logcat показывает "... еще 11" в конце http://pastebin.com/v64RyG2S

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Попробуйте:

удалить setContentView(R.layout.main_menu); из GenericActivity.

Что имеет main_menu.xml?

и изменить порядок вызовов этих методов для Index класса:

@Override
public void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.index);
    super.onCreate(savedInstanceState);
}
0 голосов
/ 23 сентября 2011

Хорошо, я полагаю, вы хотите, чтобы одно и то же меню (main_menu.xml) отображалось во всех ваших представлениях.Правильно?.

Все ваши вызовы setContentView 2 раза для одного и того же действия ... так что в лучшем случае второй макет перезаписывает первый.

Итак, у меня есть идея: вы можете переопределитьметод setContentView GenericActivity и напишите что-то вроде этого:

Во-первых, вы должны зарезервировать пространство для представления активности Index в макете main_menu, например:

....
<LinearLayout android:id="@+id/childActivity" ...></LinearLayout>
<Button android:id="@+id/buttonNavigationFinder" ...></Button>
<Button android:id="@+id/buttonNavigationIndex" ...></Button>
<Button android:id="@+id/buttonNavigationStart" ...></Button>
....

Затемудалите свой onCreate или сделайте это:

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

И наконец:

public void setContentView(int resource){

    super.setContentView(R.layout.main_menu); // ---> Attention it's main_menu <---

    final Button buttonFinder = (Button) findViewById(R.id.buttonNavigationFinder);
    buttonFinder.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent IndexActivity = new Intent(GenericActivity.this, Finder.class);     
            GenericActivity.this.startActivity(IndexActivity);
        }
    });

    final Button buttonIndex = (Button) findViewById(R.id.buttonNavigationIndex);
    buttonIndex.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent IndexActivity = new Intent(GenericActivity.this, Index.class);     
            GenericActivity.this.startActivity(IndexActivity);
        }
    });

    final Button buttonStart = (Button) findViewById(R.id.buttonNavigationStart);
    buttonStart.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent IndexActivity = new Intent(GenericActivity.this, MainMenu.class);     
            GenericActivity.this.startActivity(IndexActivity);
        }
    }); 


    //And now you have to fill the space for the child Activity with Index (or others) Activity view
    LinearLayout childActivity = (LinearLayout) generalView.findViewById(R.id.childActivity);
    View activityView = View.inflate(this,resource,null); //--> Now it's resource <--
    childActivity.add(activityView);
} 

Это идея, надеюсь, она вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...