Как работает интерфейс в Android - PullRequest
0 голосов
/ 06 декабря 2018

Я новичок в Android разработке и мне трудно понять, как interfaces передает значения между Activities.

Я создал Interface как ,

public interface ValuePasser {
    void valueObtained(String value);
}

И в первом действии я устанавливаю значение как

public class MainActivity extends AppCompatActivity implements ValuePasser {

ValuePasser valuePasser;


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

    valuePasser = (ValuePasser) this;
    valuePasser.valueObtained("test Value");


    Intent i = new Intent(this, Main2Activity.class);
    startActivity(i);

}

  @Override
  public void valueObtained(String value) {
      Log.d("TAG", "TAg");
   }
}

И во втором Activity я пытаюсь получить значениекак

public class Main2Activity extends AppCompatActivity implements ValuePasser {

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

  @Override
  public void valueObtained(String value) {
      Toast.makeText(Main2Activity.this, value, Toast.LENGTH_SHORT).show();
  }
}

Он не работает. Скажите, пожалуйста, как нужно использовать interfaces и как он хранит данные, чтобы он был полезен для таких нубов, как я.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Если вы хотите передать строку между действиями, вы должны передать дополнительный параметр в вашем намерении, используя уникальный идентификатор для вашей строки.

В родительском действии:

Intent i = new Intent(this, Main2Activity.class);
i.putExtra("your_string_identifier", "string value");
startActivity(i);

В целевом действии:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  String yourString = getIntent().getStringExtra("your_string_identifier");
}

В противном случае, если вы хотите передать структурированные данные, вам следует использовать интерфейс Parcelable, как описано в этом простом руководстве .Кроме того, вы можете использовать библиотеку Parceler от johncarl81, которая устраняет большую часть шаблонного интерфейса Parcelable.Дайте мне знать, если это поможет

0 голосов
/ 06 декабря 2018

Это - то, как вы можете использовать interface между двумя Activity для передачи данных.

Примечание - Interface в основном используются, если у вас есть состояние предыдущегокласс, в котором вы хотите передать данные.Здесь ваша деятельность, в которой вы получаете данные, должна начинаться сначала, и вам нужно Context этой активности в состоянии паузы.Если ваша деятельность разрушена и у вас нет Context действия, но вы хотите передать данные, то лучше использовать putExtra, так как interface не будет работать в этом случае.

Это действие, в которое вы будете получать данные через interface

public class RecieverActivity extends AppCompatActivity implements ValuePasser {

public static ValuePasser valuePasserSecondActivity; // this will be static so that you can use it in your main activity from where you have to send the data

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

    valuePasserSecondActivity = this;
 }

  @Override
  public void valueObtained(String value) {
      Toast.makeText(RecieverActivity.this, value, Toast.LENGTH_SHORT).show();
  }
}

Это ваше действие Откуда вы будете отправлять данные через interface

    public class SendDataActivity extends AppCompatActivity{

    private ValuePasser valuePasserFirstActivity; // your interface

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

        valuePasserFirstActivity = RecieverActivity.valuePasserSecondActivity; // intialize it with the Reciever's end activity interface

        if(valuePasserFirstActivity!=null)
          valuePasserFirstActivity.valueObtained("test Value");

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