Я уверен, что это провал в моем понимании намерений, но у меня есть 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;
}
});
}
getExtras() возвращает пакет, который можно установить на putExtras(), здесь вы используете putExtra(). –
Hi Neet, Возможно, я неправильно понял, но я попытался использовать i.getLongExtra («Action._ID», 0); а не Bundle, и он по-прежнему имеет тот же результат. – John
Можете ли вы показать нам больше кода, который отправляет «Intent»? –