にからListView
にfragment
追加できる がありBroadcastReceiver
ます。ただし、アプリが「最近」パネルから削除された場合 (アプリのサムネイルをスワイプして離す - [設定] で [強制停止] を選択しない) はBroadcastReceiver
引き続き実行されます (アプリが最近から削除されたときに実行されるはずです) が、私はを更新しようとすると強制終了ダイアログが表示されListView
ます。
最近使用したアプリからアプリを削除するとどうなるかについて私が収集したことは、アプリを強制終了するのではなく、すべてのアクティビティを停止するだけであるということです。これは、BroadcastReceivers
とServices
が実行し続けることを意味します。ここに私の問題があります -Activity
停止した ListView を更新しようとしています。
編集:最近のものから削除すると、 onStop() が呼び出されると思います。
ListView を更新してアクティビティを実行し続けるサービスを作成する必要がありますか? 違いはありますか?
私がやろうとしていることは、SMS アプリと同じです。SMS アプリでは、ブロードキャストが受信され、メッセージを含む ListView が更新されて新しいメッセージが表示されます。
編集:いくつかのコードを追加
これはFragment
を含むListView
です:
public class HistoryFragment extends FragmentBase implements OnItemAddedHandler {
ListView lv;
HistoryAdapter simpleAdpt;
int mPosition;
int index;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View histView = inflater.inflate(R.layout.history_fragment, container,
false);
setHasOptionsMenu(true);
ListView lv = (ListView) histView.findViewById(R.id.h_listView);
simpleAdpt = new HistoryAdapter();
lv.setAdapter(simpleAdpt);
return histView;
}
private class HistoryAdapter extends BaseAdapter {
private List<Map<String, Object>> mPlanetsList;
public HistoryAdapter() {
mPlanetsList = DataModel.getInstance().getPlanetList();
}
@Override
public int getCount() {
return mPlanetsList.size();
}
@Override
public Object getItem(int position) {
return mPlanetsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
convertView = LayoutInflater.from(getActivity()).inflate(
R.layout.history_item, null);
Log.i("convertView", "was null");
}
TextView tv_title = (TextView) convertView
.findViewById(R.id.hi_tv_title); // This is part of the layout of each item
HashMap<String, String> itemDataHashMap = (HashMap<String, String>) getItem(position);
tv_title.setText(itemDataHashMap.get("planet"));
return convertView;
}
}
@Override
public void onItemAdded(Object data) {
simpleAdpt.notifyDataSetChanged();
}
@Override
public void onItemRemove(int postion) {
simpleAdpt.notifyDataSetChanged();
}
}
これは、BroadcastReceiver
にアイテムを追加するために使用しようとしているListView
です。を使用して発射されAlarmManager
ます。これは、アイテムがに追加される前に、ユーザーが最近のパネルからアプリを削除する時間があることを意味しますListView
。
public class ReminderBroadcastReceiver extends BroadcastReceiver {
// This is declared in the manifest
@Override
public void onReceive(Context context, Intent intent) {
String title = "title";
DataModel.getInstance()
.addItem(title); // Add to History
}
}
そこにDataModel
は:
public static DataModel getInstance() {
if (null == instance) {
Log.i("getInstance", "null");
instance = new DataModel();
}
return instance;
}
private DataModel() {
initList();
}
private void initList() {
mHistoryList = History.getList();
for (int i = 0; i < mHistoryList.size(); i++) {
mPlanetsList.add(mHistoryList.get(i).createPlanet());
}
}
public void addItem(String title) {
History history = new History();
history.getDataHashMap().put("planet", title);
history.addToHistoryDB(); // This just adds to a Database
mHistoryList.add(0, history); // Help keep the orders the same
mPlanetsList.add(0, history.createPlanet());
if (null != mOnItemAddHandler) {
mOnItemAddHandler.onItemAdded(title);
}
}
さらにコードが必要な場合は、言ってください