2013-07-31 1 views
1

Я реализую приложение с Tabhost. На одной из моих вкладок я выполняю несколько действий (ActivityGroup).Невозможно переопределить onBackНастроенный ни onKeyDown - Android

Например: Я нахожусь в действии один, после щелчка в списке, я перехожу к действию два на той же вкладке. Проблема в том, что когда я нажимаю кнопку «Назад», приложение закрывается, и я хочу вернуться к первой активности. Я перезаписал метод onBackPressed(), метод onKeyDown, и они не будут вызваны, они не будут уволены. Я видел много сообщений с той же проблемой, но любое из предложенных решений не работает.

был бы рад за вашу помощь!

Создание вкладок:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_tab); 

    TabHost fichas = getTabHost(); 
    fichas.setup();  

    TabHost.TabSpec spec=fichas.newTabSpec("tab1"); 
    Intent i = new Intent(getApplicationContext(), AllProductsActivity.class); 
    spec.setContent(i); 
    spec.setIndicator("Hoy"); 
    fichas.addTab(spec); 

    TabHost.TabSpec spec2=fichas.newTabSpec("tab2"); 
    Intent i2 = new Intent(getApplicationContext(), QueActivity.class); 
    spec2.setContent(i2); 
    spec2.setIndicator("Que"); 
    fichas.addTab(spec2); 

    spec=fichas.newTabSpec("tab3"); 
    spec.setContent(R.id.Cuando); 
    spec.setIndicator("Cuando"); 
    fichas.addTab(spec); 

    spec=fichas.newTabSpec("tab4"); 
    spec.setContent(R.id.Donde); 
    spec.setIndicator("Donde"); 
    fichas.addTab(spec); 

} 

На QueActivity.class я уверен, реализации onClickListener, чтобы показать новый вид деятельности в той же вкладке:

public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      //creo el nuevo objeto para poder llamarlo 

      Intent intent = new Intent(QueActivity.this, ProductosCategorias.class); 

      //Creo la informacion para pasar entre actividades 
      Bundle informacion= new Bundle(); 
      intent.putExtra("eventos",categorias.get(position).getEventos()); 
      Toast.makeText(getApplicationContext(), "has seleccionado "+ categorias.get(position).getNombre(), Toast.LENGTH_SHORT).show(); 
      //New activity 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      View view = (getLocalActivityManager().startActivity("productos", intent)).getDecorView(); 
      setContentView(view);         
     } 

активность запрошенные. Вот где я хочу, чтобы переопределить onBackPressed()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_productos_categorias); 
    //Do stuff here 
    }); 

Вне метода OnCreate я переопределение:

public void onBackPressed(){ 
    System.out.println("Fires"); 
    //Go back to the other intent 
} 

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

+0

Попробуйте вызвать super.onBackPressed перед линией System.out. – Razgriz

+0

@ Razgriz уже пытался, но ничего не происходит – n4h1n

+0

Возможный дубликат [Проблема с onActivityResult в активности вкладок] (http://stackoverflow.com/questions/11556684/issue-with-onactivityresult-in-tab-activity) –

ответ

1

Это происходит потому, что в ActivityGrouponActivityResult событие дозвонились на вашем ActivityGroup классе, а не в activity вы вызываете его.

Этот стек Переполнение вопрос может решить вашу проблему:

Issue with onActivityResult in tab activity

+0

проблема решена ! – n4h1n

0

Ваш основной вид деятельности, в котором размещен tabwidget, получает вызов onBackPressed с использованием интерфейсов обратного вызова или проверяет, находится ли текущее действие на переднем плане во время нажатия кнопки назад.

0

Во-первых, где и реализуется onBackPressed, В вашей tabhost деятельности (которая имеет все вкладки активности) или Вкладки активности (QueActivity).

Активность TabHost (ActivityGroup) не вызывает onBackPressed на дочерних вкладках. Я думаю, что это нужно делать вручную.

TabHost активность (ActivityGroup)

@Override 
public void onBackPressed(){ 
    Activity currentActivity = getCurrentActivity(); 
    if(currentActivity != null) 
     currentActivity.onBackPressed(); 
} 

С выше код ваш QueActivity должен получить onBackPressed называется.

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