Как мне справиться с повторным запуском приложения, пока оно свернуто?

Я написал приложение для Android, которое читает информацию из базы данных и показывает на ListView она имеет ActionBar вверху страницы и ButtonBar внизу, все работает правильно, пока я не нажму BackButton моего телефона и мое приложение свернуто. Затем я попытался запустить новый (не убирая предыдущий), нажав на иконку этого из списка установленных приложений. когда я пытаюсь открыть новое одно открытое приложение, но не отображать какую-либо строку базы данных. Просто ActionBar в верхней части страницы и ButtonBar подошел и верхний край этого исправления к нижнему краю ActionBar, как мне это исправить? Я добавил код моего первого Activity как следует, я буду благодарен, если не минусите меня, если мой вопрос неверен.

@SuppressLint({ "NewApi", "ServiceCast" })
public class Index extends Activity implements OnItemClickListener {

    private final static String EXTRA_MASSAGE = "";
    private final static String MESSAGE_TO_SETTING = null;

    // add for data base
    private static final String DB_NAME = "amam-khmini.gdb";

    // database
    private static final String TABLE_NAME = "cat";
    private static final String CAT_ID = "_id";
    private static final String CAT_TEXT = "text";

    private static final String TABLE_NAME2 = "font";
    private static final String FONT_ID = "_id";
    private static final String FONT_TYPE = "font_type";
    private static final String FONT_SIZE = "font_size";

    private SQLiteDatabase database;
    static ListView listView;
    List<RowItem> rowItems;
    private ArrayList<String> poemtype;
    private ArrayList<Integer> ids;

    private String fontName;
    private int fontSize;
    // end of database

    static CustomListViewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

        // set custom view
        View actionBarView = getLayoutInflater().inflate(R.layout.actionbar,
                null);

        ActionBar.LayoutParams params = new ActionBar.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        actionBar.setCustomView(actionBarView, params);

        // Hide the home icon
        actionBar.setIcon(android.R.color.transparent);
        actionBar.setLogo(android.R.color.transparent);

        TextView title = (TextView) findViewById(R.id.title);

        setContentView(R.layout.activity_index);

        // add for database
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this,
                DB_NAME);

        database = dbOpenHelper.openDataBase();
        fillIndex();

        getFont();

        rowItems = new ArrayList<RowItem>();
        for (int i = 0; i < poemtype.size(); i++) {
            RowItem item = new RowItem(poemtype.get(i));
            rowItems.add(item);
        }

        listView = (ListView) findViewById(R.id.list);
        adapter = new CustomListViewAdapter(this, R.layout.indexitem_row,
                rowItems);

        adapter.setFontType(fontName);
        adapter.setFontize(fontSize);

        listView.setAdapter(adapter);
        listView.setOnItemClickListener(this);

    }

    @Override
    public void onDestroy() {
        listView.setAdapter(null);
        super.onDestroy();
    }

    private void getFont() {
        // TODO Auto-generated method stub
        String[] tableColumns = new String[] { FONT_TYPE, FONT_SIZE };
        String whereClause = FONT_ID + " LIKE ?";
        String[] whereArgs = new String[] { String.valueOf(1) };
        Cursor fontCursor = database.query(TABLE_NAME2, tableColumns,
                whereClause, whereArgs, null, null, FONT_ID);
        fontCursor.moveToFirst();
        if (!fontCursor.isAfterLast()) {
            fontName = fontCursor.getString(0);
            fontSize = fontCursor.getInt(1);
        }
        Log.d("type of font in getFont Index", fontName);
        Log.d("size of font in getFont Index", Integer.toString(fontSize));
        fontCursor.close();
    }

    private void fillIndex() {
        poemtype = new ArrayList<String>();
        ids = new ArrayList<Integer>();

        String[] tableColumns = new String[] { CAT_ID, CAT_TEXT };
        String whereClause = "PARENT_ID = ?";
        String[] whereArgs = new String[] { "6001" };
        Cursor poetCursor = database.query(TABLE_NAME, tableColumns,
                whereClause, whereArgs, null, null, CAT_ID);

        poetCursor.moveToFirst();
        if (!poetCursor.isAfterLast()) {
            do {
                Integer id = poetCursor.getInt(0);
                String name = poetCursor.getString(1);
                poemtype.add(name);
                ids.add(id);
            } while (poetCursor.moveToNext());
        }
        poetCursor.close();
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {

        // TODO Auto-generated method stub

        Toast toast = Toast.makeText(getApplicationContext(), "Item "
                + (position + 1) + ": " + rowItems.get(position),
                Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
        toast.show();

        Intent intent = new Intent(this, PoemType.class);
        String[] extra = { ids.get(position).toString(),
                poemtype.get(position).toString() };

        intent.putExtra(EXTRA_MASSAGE, extra);
        startActivity(intent);
    }

    public void showSettings(View view) {
        Intent intent = new Intent(this, Options.class);
        String message = "Index";
        intent.putExtra(MESSAGE_TO_SETTING, message);
        startActivity(intent);
    }

    public static void setFont(String fontName1, int fontSize1) {
        // TODO Auto-generated method stub
        adapter.setFontType(fontName1);
        adapter.setFontize(fontSize1);
        listView.setAdapter(adapter);
    }

    public void showFontSetting(final View view) {
        PopupMenu popup = new PopupMenu(this, view);
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.menu, popup.getMenu());
        popup.show();

        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                // TODO Auto-generated method stub
                String message = "Index";
                switch (item.getItemId()) {
                case R.id.item1:
                    Toast.makeText(Index.this,
                            "You Clicked : " + item.getTitle(),
                            Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(view.getContext(),
                            IndexFont.class);

                    intent.putExtra(MESSAGE_TO_SETTING, message);
                    startActivity(intent);
                    break;
                case R.id.item2:
                    Intent intent2 = new Intent(view.getContext(),
                            HemistichFont.class);
                    intent2.putExtra(MESSAGE_TO_SETTING, message);
                    startActivity(intent2);
                    break;
                }
                return true;
            }

        });

    }

}

1 ответ

Решение

Просто переместите следующий код из onCreate в onResume, теперь, даже если приложение было свернуто, при повторном открытии onResume будет запущен и listView будет снова заполнен

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();


ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this,
            DB_NAME);

    database = dbOpenHelper.openDataBase();
    fillIndex();

    getFont();

    rowItems = new ArrayList<RowItem>();
    for (int i = 0; i < poemtype.size(); i++) {
        RowItem item = new RowItem(poemtype.get(i));
        rowItems.add(item);
    }

    listView = (ListView) findViewById(R.id.list);
    adapter = new CustomListViewAdapter(this, R.layout.indexitem_row,
            rowItems);

    adapter.setFontType(fontName);
    adapter.setFontize(fontSize);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(this);
}

не забудьте удалить строки из вашего onCreate или вы будете заполнять список дважды. Надеюсь, что это удастся с вами. дай мне отзыв

Другие вопросы по тегам