2011-02-04 3 views
3

У меня есть панель навигации в моем приложении, дело в том, что я хочу, чтобы навигатор был доступен во всех действиях. Я полагаю, что я должен установить contentView два раза, но это не работает, конечно.2 макеты 1 активность android

Я смотрел, но я не собираюсь работать. У меня суперкласс, могу ли я установить этот второй макет из моего суперкласса?

ответ

4

Вы должны включить навигационную панель через тег <include> из других макетов. Настройка макета контента дважды не будет работать, так как Android находится в обратных вызовах, в основном, всегда используя то, что сказал пользователь. Таким образом,

setContentLayout(R.layout.nav); 
setContentLayout(R.layout.main); 

приведет к использованию только основной компоновки.

Посмотрите на this article, в котором приведен пример использования тега include.

+0

Вы имеете в виду, что мне нужно написать один и тот же макет в каждом макете, или я должен использовать тег ? – madcoderz

+1

Используйте тег include, чтобы включить панель навигации. Обновит мой ответ, чтобы сделать его более понятным. –

2

Вы можете распространять стандартные действия (Activity, ListActivity и т. Д., Если вы используете какие-либо другие), и использовать их в качестве базы для включения nav_bar.

Например:

Определить макет с Nabar как этот

<LinearLayout 
    ... 
    android:orientation="vertical" 
> 
    <YourNavBarComponent 
    ... 
    /> 
    <FrameLayout 
    android:id="@+id/nav_content" 
    ... 
    > 
    // Leave this empty for activity content 
    </FrameLayout> 
</LinearLayout> 

Это будет ваша база макет содержит все другие макеты в nav_content кадре. Далее, в создании базового класса активности, и выполните следующие действия:

public abstract class NavActivity extends Activity { 

    protected LinearLayout fullLayout; 
    protected FrameLayout navContent; 

    @Override 
    public void setContentView(final int layoutResID) { 
     fullLayout= (LinearLayout) getLayoutInflater().inflate(R.layout.nav_layout, null); // Your base layout here 
     navContent= (FrameLayout) fullLayout.findViewById(R.id.nav_content); 
     getLayoutInflater().inflate(layoutResID, navContent, true); // Setting the content of layout your provided in the nav_content frame 
     setContentView(fullLayout); 
     // here you can get your navigation buttons and define how they should behave and what must they do, so you won't be needing to repeat it in every activity class 
    } 
} 

И теперь, когда вы создаете новый вид деятельности, в котором Вы нуждаетесь в навигационной панели, просто расширить NavActivity вместо этого. И ваш навигационный бар будет размещен там, где он вам нужен, не повторяя его в каждом макете снова и снова и не загрязняя макеты (не говоря уже о повторении кода для управления навигацией в каждом классе активности).

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