2015-12-17 2 views
0

У меня проблема с моей «обратной кнопкой» в приложении для 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, похоже, называется вместо этого. Я не уверен, что вызывает это, поэтому, если кто-то может пролить свет на ситуацию, я был бы очень признателен.

Спасибо!

+0

У вас есть включенная деятельность? В этом случае onCreate будет вызываться первым, затем onActivityResult. –

+0

'requestCode' читает документ для этого параметра – njzk2

+0

, вы говорите, что' onActivityResult' не вызывается, но вы положили точку останова в начале функции, чтобы убедиться, что это действительно так? – njzk2

ответ

0

Проблема в том, что я путает кнопки вверх с задней кнопки. Я не понимал разницы. Прочитав о 2, проблема стала ясна. onActivityResult работает для кнопки «Назад», как многие из вас указали, но для кнопки «вверх» вам нужно использовать onOptionsItemSelected (элемент MenuItem).

0
 startActivityForResult(intent, 1); 

     setResult(Activity.RESULT_OK, resultData); 

Активность.RESULT_OK - 1? потому что, когда вы начинаете активность в результате вы установите код запроса 1

+0

А, так, видимо, это-1 ... Я думал, что это было 1. Я изменил их на одинаковое число, но onActivityResult все еще не вызывается :( –

+0

Вместо использования data.getIntExtra («id», 0) , используйте data.getStringExtra («id»), а затем вернитесь к int –

+0

. Моя проблема заключается в том, что сам метод никогда не вызывается, поэтому я не думал, что изменение этого действительно устранит проблему. Тем не менее, я попробовал это ... не повезло –

0

может быть, вы можете использовать

startActivityForResult(intent,code) 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     user.setName(data.getStringExtra("name")) 
     Toast.makeText(this, data.getStringExtra("name"), 1).show(); 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
+0

Учитывая, что некоторые из кода вашего блока принадлежат другому проекту, в какой части, в частности, вы предлагаете попробовать? –

Смежные вопросы