1

にからListViewfragment追加できる がありBroadcastReceiverます。ただし、アプリが「最近」パネルから削除された場合 (アプリのサムネイルをスワイプして離す - [設定] で [強制停止] を選択しない) はBroadcastReceiver引き続き実行されます (アプリが最近から削除されたときに実行されるはずです) が、私はを更新しようとすると強制終了ダイアログが表示されListViewます。

最近使用したアプリからアプリを削除するとどうなるかについて私が収集したことは、アプリを強制終了するのではなく、すべてのアクティビティを停止するだけであるということです。これは、BroadcastReceiversServicesが実行し続けることを意味します。ここに私の問題があります -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);
        }
    }

さらにコードが必要な場合は、言ってください

4

0 に答える 0