Похоже, вам нужна модель данных для хранения данных между действиями.
Одним из решений было бы создание статического класса или использование шаблона проектирования singleton. Это может забрать результат из сервиса. Вы должны инициализировать это в действии A и запустить службу, прежде чем запускать намерение для действия B.
Затем в действии B вы можете отправить вызов метода, чтобы зарегистрировать его функцию обратного вызова. Если данные есть, немедленно вернитесь к функции обратного вызова. Если нет, сделайте это, когда ваш новый класс будет вызван из функции.
Затем ваши данные передаются и извлекаются/обновляются только тогда, когда вам это нужно.
// ----------- Класс для хранения вашего элемента данных -----------
public class DataItem {
private Integer id = -1;
// My Data stuff
public Integer getId() {
return this.id;
}
}
// ----------- Интерфейс для соединения всего этого воедино -----------
import java.util.ArrayList;
public interface NotifiyDataInterface {
public void completedDataLoad( ArrayList data, String status);
}
// ----------- Класс Singleton для выборки данных -----------
public class DataFetcher {
static DataFetcher _instance = null;
ArrayList<NotifiyDataInterface> _callBackList = null;
ArrayList<DataItem> _cachedData = null;
String _dataStatus = "";
public DataFetcher() {
_callBackList = new ArrayList<NotifiyDataInterface>();
}
public static DataFetcher getInstance() {
if (DataFetcher._instance == null) {
DataFetcher._instance = new DataFetcher();
}
return _instance;
}
public void fetchData(NotifiyDataInterface _callBack) {
if (_cachedData != null) {
_callBack.completedDataLoad(this._cachedData, this._dataStatus);
return;
}
// Add to the call back list
this._callBackList.add(_callBack);
// Code to call your service to get data
//TODO: Add code to call your service
}
public void dataLoadComplete(ArrayList<DataItem> _newItems, String _fetchStatus) {
// Called from the service on a completed data load
this._cachedData = _newItems;
this._dataStatus = _fetchStatus;
NotifiyDataInterface _item = null;
for (int i = 0; i < _callBackList.size(); i++) {
_item = _callBackList.get(i);
_item.completedDataLoad(this._cachedData, this._dataStatus);
}
// Clear out the call back list
_callBackList.clear();
}
}
// ----------- Класс для деятельности B -----------
public class ActivityB extends ActionBarActivity implements NotifiyDataInterface {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
// Get the single instance from the singleton pattern
DataFetcher dataFetcher = DataFetcher.getInstance();
dataFetcher.fetchData(this);
}
// Here is where you call back is fired
public void completedDataLoad( ArrayList data, String status) {
//TODO: Your Code to call on data load here
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.layout.activity_b, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
person
JodiMiddleton
schedule
20.02.2015