Новые макеты в TabHost

Я использую tabHost в своем приложении, но в одном из представлений (соответствующем одной из вкладок) у меня есть кнопка, которая должна привести меня к другому действию, а затем к другому макету. Вопрос в следующем: как мне сделать так, чтобы этот новый макет мог по-прежнему иметь доступ к вкладкам? или, лучше сказать, как мне загрузить этот новый макет внутри FrameLayout?.

Здесь я загрузил то, что пытаюсь сделать: http://imageshack.us/photo/my-images/541/exampleu.png/

Заранее спасибо.!

Pd: я новичок в Android, может быть, есть лучший способ достичь моей цели без использования TabActivity. Я открыт для любого предложения.

EDITED: поэтому я решил использовать фрагменты, как мне было предложено. И теперь у меня есть следующее:

  • AplicationActivity расширяет FragmentActivity
  • ClientActivity расширяет фрагмент
  • SettingsActivity расширяет фрагмент
  • DataClientActivity расширяет фрагмент

и следующие макеты:

  • activity_aplicacion
  • activity_client
  • настройки_активности
  • activity_data_client

В файле activity_aplicacion.xml есть TabHost, FrameLayout и TabWidget, и из них я могу перейти к ClientActivity и SettingsActivity с помощью вкладок.

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

public void onClickNew(View view){
    DataClientActivity fragmentDataClient = new DataClientActivity ();
    final FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(android.R.id.tabcontent,fragmentDataClient , "fragmentDataClient "); 
    ft.addToBackStack(null);
    ft.commit(); 
 }

Но когда я запускаю свое приложение, я получаю следующую ошибку:

05-04 21:55:04.780: E/AndroidRuntime(7515): java.lang.IllegalStateException: не удалось найти метод onClickNew(View) в классе активности com.nrAplicationActivity для обработчика onClick в классе представления android.widget.Button с идентификатором 'buttonNew'

Так что я немного запутался прямо сейчас. Почему у меня должен быть метод onClickNew в AplicationActivity, а не в ClientActivity, где у меня есть кнопка?

EDITED 2: я нашел решение для этого:

открытый класс ClientActivity расширяет фрагмент {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    View view = inflater.inflate(R.layout.activity_clientes, container, false);


    **// Register for the Button.OnClick event
    Button b = (Button)view.findViewById(R.id.buttonNew);
    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
           // Toast.makeText(Tab1Fragment.this.getActivity(), "OnClickMe button clicked", Toast.LENGTH_LONG).show();
            Log.e("onClickNuevo2 ", "inicio");
            DataClientActivity fragmentDataClient= new DataClientActivity();
            final FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.replace(android.R.id.tabcontent,fragmentDataClient, "fragmentDataClient"); 
            ft.addToBackStack(null);
            ft.commit(); 
        }
    });**
    return view;
}

}

Мне просто нужно было зарегистрировать прослушиватель onClick для моей кнопки внутри моей ClientActivity. Теперь все работает отлично!. Большое спасибо, Дивья Мотивала :) и благодаря этой ссылке: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/#comment-410


person kiduxa    schedule 04.05.2013    source источник


Ответы (1)


Вы можете использовать Fragments вместо действий внутри Tab. И по нажатию кнопки вы можете заменить существующий фрагмент новым, например:

    final FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.realtabcontent,newFrag, "New Fragment"); 
    ft.addToBackStack(null);
    ft.commit(); 

В ft.replace первый параметр — это фрейммакет, к которому должен быть присоединен фрагмент, второй — объект класса фрагмента, который нужно создать, а третий — тег имя.

person Divya Motiwala    schedule 04.05.2013
comment
Проблема в том, что я использую уровень API 8, и, насколько я знаю, Fragmen представлены на уровне API 11. Так что, думаю, у меня будут проблемы с этим? - person kiduxa; 05.05.2013
comment
Я принял ваше предложение, так как узнал, что есть поддержка библиотеки Android, поэтому я изменил свою TabActivity на FragmentActivity и Activity на Fragment. Я отредактировал свой вопрос, пожалуйста, прочитайте. - person kiduxa; 05.05.2013