Реакция модифицированного метода на повторное использование в другой деятельности
Как я могу получить данные из getDataForId(Integer.toString(1)); вызывая тот же метод getDataForId из класса DisplayData?
Я хочу использовать тот же метод и получить результат. Нет смысла копировать и вставлять один и тот же метод в другой класс действий. Тогда один и тот же код будет повторен дважды.
Это мой DisplayData.class
public class DisplayData extends AppCompatActivity {
Detail reqDetail;
String BASE_URL = "";
TextView name;
ImageView image;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_data);
name = (TextView) findViewById(R.id.name);
image = (ImageView)findViewById(R.id.image);
public void getDataForId(final String id) {
ApiInterface apiInterface = APIClient.getApiInterface();
Call<MyResponse> call = apiInterface.getResponse();
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response.body() != null) {
MyResponse myResponse = response.body();
List<Detail> details = myResponse.getDetails();
for (Detail d : details) {
if (d.getId().equals(id)) {
reqDetail = d;
name.setText(reqDetail.getName());
Picasso.with(DisplayData.this)
.load(reqDetail.getName())
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(image);
}
}
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
}
});
}
Это мой класс SecondData, в котором я хочу отобразить тот же ответ с данными DisplayData, повторно используя те же методы
public class SecondData extends AppCompatActivity {
Detail reqDetail;
String BASE_URL = "";
TextView name;
ImageView image;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_main);
name = (TextView) findViewById(R.id.name);
image = (ImageView)findViewById(R.id.image);
}
}
3 ответа
Создайте класс, чтобы сделать вызов для такой модификации
public class SampleClass {
private DataInterface mListener;
public SampleClass() {
super();
}
public void getDataForId(final String id) {
ApiInterface apiInterface = APIClient.getApiInterface();
Call<MyResponse> call = apiInterface.getResponse();
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response!=null && response.body() != null && mListener != null) {
mListener.responseData(response.body());
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
}
});
}
public void setOnDataListener(DataInterface listener) {
mListener = listener;
}
public interface DataInterface {
void responseData( MyResponse myResponse );
}
}
И в своей деятельности просто называйте класс, как это
SampleClass sampleClass = new SampleClass();
sampleClass.setOnDataListener(new SampleClass.DataInterface() {
@Override
public void responseData(MyResponse myResponse) {
}
});
sampleClass.getDataForId("UR ID");
Также в вашем классе храните идентификатор как личную переменную memeber
private Integer YOUR_ID;
Затем при получении результата сравните идентификатор результата с этим идентификатором.
List<Detail> details = myResponse.getDetails();
for (Detail d : details) {
if (d.getId().equals(YOUR_ID)) {
reqDetail = d;
name.setText(reqDetail.getName());
Picasso.with(DisplayData.this)
.load(reqDetail.getName())
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(image);
}
}
Итак, если вы хотите использовать ответ одного действия на другое действие,
Затем сначала сохраните ответ в List или ArrayList.
А затем передать данные с помощью Intent
,
Это должно сделать трюк.
Вы должны создать BaseActivity и расширить две другие из него. Затем вы помещаете метод, который вы хотите использовать в обоих из них, в BaseActivity и делаете его общедоступным, чтобы вы могли использовать его правильно.
Обратите внимание, что все, что вам нужно в вашем методе извне, не будет доступно в BaseActivity, поэтому вы должны либо передать конструктор, либо объявить его в BaseActivity, если это возможно.
Вам также следует подумать о том, каким должен быть возврат вашего метода, чтобы вы имели доступ к его результатам.
Вы можете обратиться к этому вопросу, чтобы узнать больше: