У меня проблема с моей «обратной кнопкой» в приложении для Android. У меня есть Activity под названием DashboardActivity, который вызывает AskQuestionActivity. Я передаю значение AskQuestionActivity и хочу отправить это значение обратно в DashboardActivity, когда нажата кнопка «Назад». Это мой код до сих пор. Класс ребенок:onActivityResult не вызывал кнопку «назад»
public class AskQuestionActivity extends AppCompatActivity {
private int userId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ask_question);
setUserId(getIntent().getExtras().getInt("id"));
}
@Override
public void onBackPressed() {
Intent resultData = getIntent();
resultData.putExtra("id", getUserId());
setResult(2, resultData);
finish();
// super.onBackPressed();
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
}
родительский класс:
public class DashboardActivity extends AppCompatActivity {
private int userId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dashboard);
setUserId(getIntent().getExtras().getInt("id"));
DisplayMetrics dm = this.getResources().getDisplayMetrics();
RelativeLayout linearLayout = (RelativeLayout) findViewById(R.id.dashboard);
TextView availableQuestions = new TextView(this);
RelativeLayout.LayoutParams relativeLayout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
relativeLayout.setMargins(convertDpToPx(100,dm), convertDpToPx(40,dm), convertDpToPx(0,dm), convertDpToPx(0, dm));
availableQuestions.setLayoutParams(relativeLayout);
User u = getUser(this.userId);
if (u.getAvailableQuestionCount() > 0) {
availableQuestions.setTextColor(Color.GREEN);
} else {
availableQuestions.setTextColor(Color.RED);
}
availableQuestions.setText("" + u.getAvailableQuestionCount());
linearLayout.addView(availableQuestions);
}
public void askQuestion(View view) {
Intent intent = new Intent(this, AskQuestionActivity.class);
intent.putExtra("id", getUserId());
startActivityForResult(intent, 2);
}
/**
* gets the logged in user and populates the entity
* @return
*/
private User getUser(int id) {
MySQLiteHelper mDbHelper = new MySQLiteHelper(getApplicationContext());
SQLiteDatabase db = mDbHelper.getWritableDatabase();
String[] selectionArgs = {String.valueOf(id)};
Cursor cursor = db.query("user", null, "id=?", selectionArgs, null, null, null, null);
User u = new User(new Long(id));
if (cursor.moveToFirst()) {
u.setUsername(cursor.getString(cursor.getColumnIndex("username")));
u.setPassword(cursor.getString(cursor.getColumnIndex("password")));
u.setAvailableQuestionCount(Integer.parseInt(cursor.getString(cursor.getColumnIndex("availableQuestionsCount"))));
u.setAnswerCount(Integer.parseInt(cursor.getString(cursor.getColumnIndex("answerCount"))));
} else {
return null;
}
return u;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_OK) {
Intent intent = getIntent();
setUserId(data.getIntExtra("id", 0));
}
}
/**
* getter for userId
* @return
*/
public int getUserId() {
return userId;
}
/**
* setter for userId
* @param userId
*/
public void setUserId(int userId) {
this.userId = userId;
}
private int convertDpToPx(int dp, DisplayMetrics displayMetrics) {
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
return Math.round(pixels);
}
}
и мой манифест файла:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.amk27.pollit" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".CreateAccountActivity"
android:label="CreateAccountActivity"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity
android:name=".DashboardActivity"
android:label="DashboardActivity"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity
android:name=".AskQuestionActivity"
android:label="AskQuestionActivity"
android:parentActivityName=".DashboardActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".DashboardActivity" />
</activity>
</application>
</manifest>
Проблема, кажется, что в родительском классе, onActivityResult является никогда не звонил. onCreate, похоже, называется вместо этого. Я не уверен, что вызывает это, поэтому, если кто-то может пролить свет на ситуацию, я был бы очень признателен.
Спасибо!
У вас есть включенная деятельность? В этом случае onCreate будет вызываться первым, затем onActivityResult. –
'requestCode' читает документ для этого параметра – njzk2
, вы говорите, что' onActivityResult' не вызывается, но вы положили точку останова в начале функции, чтобы убедиться, что это действительно так? – njzk2