Как отправить данные, нажав кнопку назад? - PullRequest
0 голосов
/ 04 февраля 2020

Я использую два действия: MainActivity и SubActivity.

MainActivity.class

public class MainActivity extends AppCompatActivity {
    Button button;

    @Override
    protected void onCreate() {
        ...
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent sub = new Intent(this, SubActivity.class);
                sub.putExtra("name", "a");
                startActivity(sub);
            }
        }
    }
}

SubActivity

public class SubActivity extends AppCompatActivity {
    EditText text;
    @Override
    protected void onCreate() {
        ...
        text.setText(getIntent().getStringExtra("name"));
    }

    @Override
    public void onBackPressed() {
       super.onBackPressed();
    }
}

В этом случае, если я изменю текст в EditText в SubActivity, я хочу отправить измененные текстовые данные в MainActivity при нажатии кнопки «Назад» в SubActivity (это означает SubActivity onDestroy()). Я не хочу делать второй MainActivity, подобный этому, в SubActivity.

@Override
public void onBackPressed() {
    Intent intent = new Intent (this, MainActivity.class);
    intent.putExtra("name", text.getText().toString());
    startActivity(intent);
}

Есть ли способ отправки текстовых данных, когда SubActivity удален из стека активности?

Ответы [ 4 ]

1 голос
/ 04 февраля 2020
  public class MainActivity extends AppCompatActivity {
      Button button;

     @Override
     protected void onCreate() {
      ...
       button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
               Intent sub = new Intent(this, SubActivity.class);
              sub.putExtra("name", "a");
              startActivityForResult(sub , 2);
        }
    }
}
@Override  
   protected void onActivityResult(int requestCode, int resultCode, Intent data)  
   {  
             super.onActivityResult(requestCode, resultCode, data);  
              // check if the request code is same as what is passed  here it is 2  
               if(requestCode==2)  
                     {  
                        String message=data.getStringExtra("name");   
                        textView1.setText(message);  
                     }  
   }  
}

А

      @Override
       public void onBackPressed() {
        Intent intent = new Intent (this, MainActivity.class);
        intent.putExtra("name", text.getText().toString());
        setResult(2,intent);  
    }
0 голосов
/ 04 февраля 2020

Вы можете использовать SharedPreference для хранения значения и его обновления или использовать его где угодно вместо использования Intent

, например, In MainActivity

public class MainActivity extends AppCompatActivity {
Button button;

@Override
protected void onCreate() {
    ...

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
  Editor edit=sp.edit();
  edit.putString("name","a");
  edit.commit();
            Intent sub = new Intent(this, SubActivity.class);

            startActivity(sub);
        }
    }
} }

и In SubActivity

public class SubActivity extends AppCompatActivity {
EditText text;
@Override
protected void onCreate() {
    ...
    text.setText(sp.getString("name",""));
text.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    // TODO Auto-generated method stub
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
  Editor edit=sp.edit();
 edit.putString("name",s.toString);
  edit.commit();
} });
}

@Override
public void onBackPressed() {

   super.onBackPressed();
}}

Чтобы использовать значение из SharedPreference

sp.getString("name","");

Для использования SharedPreference посмотрите на это https://developer.android.com/training/data-storage/shared-preferences#java

0 голосов
/ 04 февраля 2020

Используйте startActivityForResult вместо startActivity

MainActivity:

    public class MainActivity extends AppCompatActivity {
    Button button;
    String name= "a";
    @Override
    protected void onCreate() {
        ...
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent sub = new Intent(this, SubActivity.class);
                sub.putExtra("name", name);
                startActivityForResult(sub,100);
            }
        }
    }

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {

            if (requestCode == 100) {
              String name = data.getStringExtra("name);
                text.setText(name);
            } 
         }
      }
}

Субактивность:

public class SubActivity extends AppCompatActivity {
    EditText text;
    @Override
    protected void onCreate() {
        ...
        text.setText(getIntent().getStringExtra("name"));
    }

    @Override
    public void onBackPressed() {
       Intent resultIntent = new Intent();
       resultIntent.putExtra("name", "your_editext_value");
       setResult(Activity.RESULT_OK, resultIntent);
       finish();
    }
}
0 голосов
/ 04 февраля 2020

Вам нужно использовать startActivityForResult(), если вы ожидаете возврата от начального действия.

После этого вам также необходимо будет внедрить метод onActivityResult() в начать действие, чтобы фактически прочитать возвращенные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...