Как получить обратный звонок при нажатии кнопки «Назад» на устройстве? - PullRequest
0 голосов
/ 13 июля 2011

В соответствии с моими требованиями мне нужно реализовать вкладки для моих приложений. Такой, что каждая вкладка связана с несколькими действиями. Как: Tab1, Tab2, Tab3 ... и т. Д. Tab1: Activity1, Activity2, Activity3 .... и т. Д. Я хочу начать деятельность в таком порядке: Например: Tab1 -> Activity1 -> Activity2. Это хорошо, я сделал это.

Но если я нажимаю клавишу возврата устройства из Activity2, то он выходит на домашний экран, но должен появиться Activity1. Но если я собираюсь вернуться через пользовательский интерфейс (например, кнопку назад), то он работает нормально.

Ниже приведены мои действия по TabGoupActivity и Activity 1, Activity 2.

TabGruopActivity: -

public class TabGroupActivity extends ActivityGroup {

    private ArrayList<String> mIdList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        if (mIdList == null) mIdList = new ArrayList<String>();
    }

    @Override
    public void finishFromChild(Activity child) {
      LocalActivityManager manager = getLocalActivityManager();
      int index = mIdList.size()-1;

      if (index < 1) {
          finish();
          return;
      }

     // manager.destroyActivity(mIdList.get(index), true);
      mIdList.remove(index); index--;
      String lastId = mIdList.get(index);
      Intent lastIntent = manager.getActivity(lastId).getIntent();
      Window newWindow = manager.startActivity(lastId, lastIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
      setContentView(newWindow.getDecorView());
      }

      public void startChildActivity(String Id, Intent intent) {    
      Window window = null;
      try{
       window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP) );
      }catch(Exception e){
          System.out.println(e.toString());
      }
      if (window != null) {
          mIdList.add(Id);
          setContentView(window.getDecorView()); 
      }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
          return true;
      }
      return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          onBackPressed();
          return true;
      }
      return super.onKeyUp(keyCode, event);
    }

    public void  onBackPressed  () {
      int length = mIdList.size();
      if ( length >= 1) {
          Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
          current.finish();
      }  
    }
}

TabGroup1Activity: что расширяет TabGroupActivity (выше активности): -

public class TabGroup2Activity extends TabGroupActivity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startChildActivity("Activity2", new Intent(this, DemoActivity2.class));
    }

}

Activity1: -

public class DemoActivity2 extends Activity {

    Context context;

    protected static LocalActivityManager mLocalActivityManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo_activity2);
        context = this;

        Button button = (Button) findViewById(R.id.Button01);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(context, DemoActivity3.class);
                TabGroupActivity parentActivity = (TabGroupActivity)getParent();
                parentActivity.startChildActivity("Activity3", intent);
            }
        });

        Button button2 = (Button) findViewById(R.id.Button02);
        button2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(
                        ScrollableTabActivity.ACTION_CHANGE_TAB);
                intent.putExtra(ScrollableTabActivity.CURRENT_TAB_INDEX, 0);
                sendBroadcast(intent);
            }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            TabGroupActivity parentActivity = (TabGroupActivity)getParent();
            parentActivity.onBackPressed();
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }
}

деятельности2: -

public class DemoActivity3 extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.demo_activity3);

        Button button = (Button) findViewById(R.id.Button01);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                TabGroupActivity parentActivity = (TabGroupActivity)getParent();
                parentActivity.onBackPressed();
            }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            TabGroupActivity parentActivity = (TabGroupActivity)getParent();
            parentActivity.onBackPressed();
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }
}

Может кто-нибудь сказать мне, почему не работает кнопка возврата устройства?

1 Ответ

0 голосов
/ 14 июля 2011

Я использую TabHost и TabActivity, но это должно работать для вас. Надеюсь, что вы можете использовать его:)

поместите этот слушатель в свой:

public class TabGroupActivity extends ActivityGroup

Слушатель:

    myListener = new MyListener();

    protected class MyListener extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals("com.test.switchtabs")) {
            int res = intent.getIntExtra("switch",10);
            if(res == 0){
                tabHost.getTabWidget().getChildAt(0).performClick();
            }else if(res == 1){
                tabHost.getTabWidget().getChildAt(1).performClick();
            }else if(res == 2){
                tabHost.getTabWidget().getChildAt(2).performClick();
            }
        }else if (intent.getAction().equals("com.test.sendnow")) {

            sendTheFiles();
        }

    }
}

Внутри вашего TabGroupActivity зарегистрируйте / отмените углубление ваших потребностей, пользовательский слушатель:

@Override
protected void onResume() {
    super.onResume();
    if (!MyListenerIsRegistered) {
        IntentFilter intentFilterSwitchTabs = new IntentFilter("com.your.package.switchtabs");
      registerReceiver(myListener, intentFilterSwitchTabs);
      MyListenerIsRegistered = true;
    }
}
@Override
protected void onPause() {
    super.onPause();
    if (MyListenerIsRegistered && myListener != null) {
        unregisterReceiver(myListener);
        MyListenerIsRegistered = false;
    }
}

поместите это в свой AndroidManifest.xml

<activity android:name="com.your.package.TabGroupActivity">
    <intent-filter>
            <action android:name="com.your.package.switchtabs" />
    </intent-filter>
</activity>

На любом мероприятии отправляйте подобные трансляции, чтобы изменить вкладки,

    @Override
public void onClick(View v) {

    switch(v.getId()){  

    case R.id.etx_addtext_drawtext: 

    case R.id.button_back:
        Intent i = new Intent();
        i.putExtra("switch", 1);
        i.setAction("com.your.package.switchtabs");
        sendBroadcast(i);

        break;

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