2015-04-21 3 views
0

У меня есть пользовательская панель кнопок в приложении, которую я использую в нескольких действиях.
У него есть кнопка настройки, которая начинается SettingsActivity.Избегайте запуска активности из себя

Проблема:

, что я использую эту кнопку бар в SettingsActivity тоже, и я хочу, чтобы избежать запуска SettingsActivity от себя. Я установил onClick для кнопки во фрагменте, и я использую этот фрагмент в своих действиях, тогда я не могу установить любой флаг или дополнительные данные.

в OnClick кнопки Настройка я установить намерение так:

intent = new Intent(getActivity(), SettingsActivity.class); 
startActivityForResult(intent, 1); 

Что я делаю:

У меня есть ParentActivity, что все остальные действия проходят от него, и я переопределить startActivityForResult метод в нем ,
В результате у меня есть намерение начать SettingsActivity.

@Override 
    public void startActivityForResult(Intent intent, int requestCode) { 
     super.startActivityForResult(intent, requestCode); 
     overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_out_left); 
    } 

Что я хочу:

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

(Извините за мой бедный английский)

+1

Вы можете только определить, какая активность начала другую деятельность, если вы вручную включите эту информацию в качестве части намерения. Например, вы можете добавить имя класса вызывающей активности в качестве дополнительной цели. Я не уверен, почему вы переопределяете startActivityForResult? Возможно, вам нужно еще раз изучить свой вопрос. – JHH

+0

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

+0

позволяет мне обновлять свой Q –

ответ

1

Вы можете перегрузить startActivityForResult с другим параметром name. Таким образом, в OnClick кнопки настройки, вы просто использовать перегруженный метод:

onClick(View v){ 
    intent = new Intent(getActivity(), SettingsActivity.class); 
    startActivityForResult(intent, 1, this.getClass().getName()); 
} 

ParentActivity:

public void startActivityForResult(Intent intent, int requestCode, String name) { 
if(!name.equals(com.yourpackage.settingsactivity)) 
    startActivityForResult(intent, requestCode); 
else Toast.makeText(this, "Already in SettingsActitivty", Toast.LENGTH_SHORT).show; 
} 
@Override 
public void startActivityForResult(Intent intent, int requestCode) { 
    super.startActivityForResult(intent, requestCode); 
    overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_out_left); 
} 
+0

Хорошая идея! спасибо :) –

1

Таким образом, при условии, все, что вам нужно сделать, чтобы избежать вызова SettingsActivity от себя, я рекомендую вы пытаетесь использовать один из встроенных режимов запуска.

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

Если вы используете singleTop для SettingsActivity, начиная его, когда он уже в верхней части стека не будет вызывать новый вид деятельности должен быть запущен, а существующая деятельность получит его метод onNewIntent() называется (которые вы можете игнорировать, если вам не нужно предпринимать никаких действий).

С другой стороны, если по каким-то причинам это не будет работать, принимая предложение Марлона один шаг вперед, и если вы запустите SettingsActivity с явным намерением (установкой имени класса), вы можете переопределить startActivityForResult и проверить, если вызывающую деятельность такая же, как целевая активность, без необходимости перегружать метод параметром name.

@Override 
public void startActivityForResult(Intent intent, int requestCode) { 
    if (!intent.getComponent().getClassName().equals(getClass().getName()) { 
     super.startActivityForResult(intent, requestCode); 
    } 
} 
Смежные вопросы