Необходимо знать, где правильно разместить функцию finish (), чтобы закрыть действие - PullRequest
0 голосов
/ 30 января 2019

Я застрял, пытаясь выяснить, куда именно поместить функцию finish () в моем коде.

Я попытался поместить ее в строку 43 ProfileActivity или в строки 39 или 56 MainActivity.Я очень новичок в этом и прочитал, какова цель метода finish (), но не могу понять, куда еще в моем коде он должен идти.

Это всего лишь ниппеты кода ... есть еще (все функции жизненного цикла Activity), но я опущен, чтобы сэкономить место.

public class MainActivity extends AppCompatActivity {

SharedPreferences sp;
EditText email;
public static final String ACTIVITY_NAME = "PROFILE_ACTIVITY";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    email = (EditText)findViewById(R.id.thisEmailIsPassedToPage2);
    sp = getSharedPreferences("Lab3", Context.MODE_PRIVATE);
    String savedString = sp.getString("Email", "0");

    email.setText(savedString);
    Log.e(ACTIVITY_NAME, "In Function onCreate() in MainActivity:");

    Button login = (Button)findViewById(R.id.loginButton);
    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, 
            ProfileActivity.class);
            EditText et = 
                (EditText)findViewById(R.id.thisEmailIsPassedToPage2);
            intent.putExtra("typed", et.getText().toString());
            startActivityForResult(intent, 2);

        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) {

    int i = 0;
    i++;
    //if request code is 2, then we are coming back from ProfileActivity
    if(requestCode == 2){
        EditText et = 
(EditText)findViewById(R.id.thisEmailIsPassedToPage2);
        String fromProfile = data.getStringExtra("typed");
        et.setText(fromProfile);
        Log.i("Back", "Message");
    }
}

public class ProfileActivity extends AppCompatActivity {

private SharedPreferences sp;
private ImageButton mImageButton;
public static final String ACTIVITY_NAME = "PROFILE_ACTIVITY";
public static final int REQUEST_IMAGE_CAPTURE = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profileactivity);
    Log.e(ACTIVITY_NAME, "In Function onCreate() in ProfileActivity:");

    Intent fromPrevious = getIntent();
    String previousTyped = fromPrevious.getStringExtra("typed");


    EditText enterText = (EditText) findViewById(R.id.editText6);
    enterText.setText(previousTyped);

    mImageButton = (ImageButton) this.findViewById(R.id.imageButton);
    mImageButton.setOnClickListener(bt -> {
           dispatchTakePictureIntent();
    });
}

private void dispatchTakePictureIntent(){
    Intent takePictureIntent = new 
Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
     }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageButton.setImageBitmap(imageBitmap);
    }
}



These are the screenshots:  
[MainActivity1stPage][1]
[ProfileActivity2ndPage][2]
[AfterImageButtonPressed][3]
[AfterTakingPictureAndPressingOK][4]

1 Ответ

0 голосов
/ 30 января 2019

Если я правильно понял, ваш поток MainActivity начинает ProfileActivity для результата, затем в ProfileActivity вы запускаете ACTION_IMAGE_CAPTURE для результата, поэтому я предполагаю, что с этим результатом вы хотитевызвать ваш MainActivity onActivityResult.Так что в этом случае вам нужно setResult and finish на onActivityResult вашего ProfileActivity.

...