2015-03-13 1 views
2

Я уверен, что это провал в моем понимании намерений, но у меня есть ExpandableListView элементов, и когда я нажимаю на элемент, он запускает первый OK, но каждый раз после этого он только запускает первый снова, независимо от того, на что я нажимаю. Запрос отлаживается как ОК, но принятое намерение всегда отлаживается, как если бы первый был отправлен. После того, как полдня застряло на нем, а Google не справляется со мной, мне нужна помощь.getIntent, не могу получить свою активность, чтобы получить последние намерения

активность # 1 MainFest

<activity 
     android:name="com.h17.gpm.ActivityToDoList" 
     android:launchMode="singleInstance" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="com.h17.gpm.TODO" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
</activity> 

активность # 1 Код

Intent launch = new Intent(ActivityToDoList.this, ActivityToDoEdit.class); 
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
launch.putExtra("Action._ID", a.get_ID()); 
Log.d("ACTIVITYLAUNCHTEST", "Launch["+a.get_ID()+"]"); 
startActivity(launch); 

активность # 2 MainFest

<activity 
     android:name="com.h17.gpm.ActivityToDoEdit" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="com.h17.gpm.TODO.EDIT" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
</activity> 

активность Код # 2

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_todo_edit); 
    Intent i = getIntent(); 
    Bundle extras = null; 
    if(i != null) 
     extras = i.getExtras(); 
    if (extras != null){ 
     action_id = extras.getLong("Action._ID"); 
     Log.d("ACTIVITYLAUNCHTEST", "Receive["+action_id+"]"); 
    } 
} 

Я прочитал от других постов, которые getIntent возвращает первый Намерение так же пытался

@Override 
protected void onNewIntent(Intent intent){ 
    Bundle extras = null; 
    if(intent != null) 
     extras = intent.getExtras(); 
    if (extras != null){ 
     action_id = extras.getLong("Action._ID"); 
     Log.d("ACTIVITYLAUNCHTEST", "Receive New Intent["+action_id+"]"); 
    } 
    setIntent(intent); 
} 

Я также пробовал много комбинаций Намерение флагов и режимы запуска в Manifest, но и для жизни меня в первый раз всегда появляется как

Launch[1] 
Receive[1] 

и во второй раз

Launch[2] 
Receive[1] 

и с тех пор независимо от того, какое значение я посылаю й e запускается с первым значением, 1 и onNewIntent никогда не срабатывает.

Полная функция, которая генерирует намерения

private void loadLists(){ 
    ExpandableListView expandableList = (ExpandableListView) findViewById(R.id.expandableListViewToDoLists); 
    expandableList.setClickable(true); 
    adapter = new ActionListsExpandableAdapter(getApplicationContext()); 
    expandableList.setAdapter(adapter); 
    expandableList.setOnChildClickListener(new OnChildClickListener() { 
     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 

      Action a = (Action) parent.getExpandableListAdapter().getChild(groupPosition, childPosition); 
      if (startedForResult){ 
       Intent data = new Intent(); 
       data.putExtra("Action._ID", a.get_ID()); 
       data.putExtra("Action.SUBJECT", a.getSUBJECT()); 
       setResult(RESULT_OK, data); 
       finish(); 
      }else{ 
       ActionList al = (ActionList) parent.getExpandableListAdapter().getGroup(groupPosition); 
       Intent launch = new Intent(ActivityToDoList.this, ActivityToDoEdit.class); 
       launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       launch.putExtra("Action._ID", a.get_ID()); 
       Log.d("ACTIVITYLAUNCHTEST", "Launching activity with intent for Action ID ["+a.get_ID()+"]"); 
       launch.putExtra("ActionList._ID", al.get_ID()); 
       launch.putExtra("ActionList.position", childPosition); 
       startActivity(launch); 
      } 

      return false; 
     } 
    }); 
} 
+1

getExtras() возвращает пакет, который можно установить на putExtras(), здесь вы используете putExtra(). –

+0

Hi Neet, Возможно, я неправильно понял, но я попытался использовать i.getLongExtra («Action._ID», 0); а не Bundle, и он по-прежнему имеет тот же результат. – John

+0

Можете ли вы показать нам больше кода, который отправляет «Intent»? –

ответ

1

Может быть, это является хорошим ориентиром для вас. Мне кажется, что onNewIntent (with FLAG_ACTIVITY_SINGLE_TOP) как onCreate будет вызываться, если приложение не будет уничтожено. Надежда полезна для вас. Это работает для меня в моем случае.

Для дальнейшей ссылки см Android: get most recent intent