Невозможно go вернуться к родительской активности с помощью панели навигации назад в android - PullRequest
0 голосов
/ 25 марта 2020

Фон

У меня есть два вида деятельности, а именно MainActivity и AddPersion соответственно. Я также определил класс java, а именно BaseActivity, который реализует панель инструментов и пункты меню.

Я хочу перейти от действия MainActivity к AddPerson с помощью Намерения, а затем вернуться к MainActivity, нажав кнопку навигации назад. Я попробовал это, следуя этому видео: Как добавить Android Кнопка Назад

Проблема

Когда я нажимаю кнопку обратной навигации после переход на AddPerson ничего не происходит, т.е. я не возвращаюсь на MainActivity.

код

BaseActivity

public class BaseActivity extends AppCompatActivity {

     private Context context; // tried Activity context too with no luck

     // code for onCreate here 
     // code for onCreateOptionsMenu here

     @Override
     public boolean onOptionsItemSelected(MenuItem item){    

         switch (getItemId()){
            case R.id.share: 
                 // code for share here
                 break;                
            case R.id.addPerson: 
                 startActivity(new Intent(getContext(), AddPerson.class));
         }
         return true;
    }

    public void initToolbar(boolean isChild){

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(isChild);
    }

    public void setContext(Context context){ this.context = context; }
    public Context getContext(){  return context; }
}

MainActivity

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initToolbar(false);
        setContext(this);
    }
}

AddPerson

public class AddPerson extends BaseActivity {

     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_person);
        initToolbar(true);
     }
}

AndroidManifest

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".AddPerson"
        android:parentActivityName=".MainActivity">
    </activity>
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Я знаю, что проблема в контексте, но я не знаю, как ее исправить.

Обратите внимание, что я новичок в android.

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

В AddPerson Activity вы должны переопределить onOptionsItemSelected () Используя регистр переключателя, добавить регистр для androi.R.id.home и применить onBackPressed () .

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

Если у вас есть какие-либо вопросы, пожалуйста, ответьте. Счастливое кодирование ?

0 голосов
/ 25 марта 2020
    public void initToolbar(Context from,Context to,boolean isChild){
    Toolbar toolbar = findViewById(R.id.toolbar);
   setSupportActionBar(toolbar);
   getSupportActionBar().setDisplayHomeAsUpEnabled(true);
   toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    startActivity(new 


  Intent(from,to)
     .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

}

}); }

И если вы в действии AddPerson и хотите, чтобы t go заняло основное действие, вы можете вызвать функцию следующим образом:

initToolbar(AddPerson.this,MainActivity.class,true);

, и вы можете изменять параметры в зависимости от того, что ты хочешь

...