Данные в ListActivity не кэшируются при возврате к нему - PullRequest
0 голосов
/ 30 сентября 2011

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

Теперь при нажатии кнопки «Назад» на этой странице сведений о статье данные не отображаются.Нужно ли перезагружать данные из БД?Разве данные не должны кэшироваться?

Более того, при возврате к myListActivity не вызывается onCreate.Только onResume называется.Должен ли я сделать все в Resume?В таком случае, каков наилучший способ сохранить значение текущей категории и получить его при возвращении к ListActivity из подробностей статьи?

Спасибо

public class Home extends ListActivity implements OnItemClickListener{

    private DBAdapter dbAdapter;

    private HomeListAdapter adapter; //extends SimpleCursorAdapter


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);

        // open database
        dbAdapter = new DBAdapter(this);    
        dbAdapter.open();

        /* more stuff */

        getArticlesbyCat(category); 

        /* more stuff */

    }


    private void getArticles(int category){

        Cursor c = dbAdapter.fetchArtByCat(category);
        c.moveToFirst();        
        startManagingCursor(c);     
        String[] from = new String[] {};
        int[] to = new int[] {};

        setListAdapter(new HomeListAdapter(this, R.layout.article_row, c, from, to));
        adapter.notifyDataSetChanged(); 
        c.close();
    }    

    @Override
    public void onItemClick(AdapterView arg0, View v, int position, long arg3) {             
        /* Go to article page */
    }


    @Override
    protected void onPause() {
        super.onPause();

        // close database
        dbAdapter.close(); 
    }
}

РЕДАКТИРОВАТЬ

public class HomeListAdapter extends SimpleCursorAdapter {

    private int mLayout;
    private Cursor mCursor;
    private Resources mResources;

    // Column index
    private int mCatInd;
    private int mURLPicInd;
    private int mIntroInd;
    private int mTitleInd;

    private LayoutInflater mLayoutInflater;

    private final ImageDownloader mImageLoader;    

    private final class ViewHolder {
        public TextView category;
        public ImageView image;
        public TextView intro;
        public TextView title;
    }

    public HomeListAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);

        this.mLayout = layout;
        this.mCursor = c;

        this.mCatInd = mCursor.getColumnIndex(DBAdapter.KEY_CATEGORY_NAME);
        this.mURLPicInd = mCursor.getColumnIndex(DBAdapter.KEY_URL_PIC);
        this.mIntroInd = mCursor.getColumnIndex(DBAdapter.KEY_INTRO);
        this.mTitleInd = mCursor.getColumnIndex(DBAdapter.KEY_TITLE);


        this.mLayoutInflater = LayoutInflater.from(context);

        mResources = context.getResources(); 
        mImageLoader = new ImageDownloader(mResources,
                ((BitmapDrawable)mResources.getDrawable(R.drawable.default_row_pic)).getBitmap(), 1);

    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (mCursor.moveToPosition(position)) {
            ViewHolder viewHolder;

            if (convertView == null) {
                convertView = mLayoutInflater.inflate(mLayout, null);

                viewHolder = new ViewHolder();
                viewHolder.category = (TextView) convertView.findViewById(R.id.cat);
                viewHolder.image = (ImageView) convertView.findViewById(R.id.picture);
                viewHolder.title = (TextView) convertView.findViewById(R.id.title);
                viewHolder.intro = (TextView) convertView.findViewById(R.id.intro);
                viewHolder.intro.setMaxLines(3);

                convertView.setTag(viewHolder);
            }
            else {
                viewHolder = (ViewHolder) convertView.getTag();
            }            

            String category = mCursor.getString(mCatInd);
            String title = mCursor.getString(mTitleInd);
            String intro = mCursor.getString(mIntroInd);
            String url_pic = mCursor.getString(mURLPicInd);

            viewHolder.category.setText(category);
            viewHolder.title.setText(title);
            viewHolder.intro.setText(intro);

            if(!url_pic.equals("")){
                mImageLoader.download(url_pic, (ImageView) viewHolder.image);
            }
            else {
                viewHolder.image.setImageResource(R.drawable.default_row_pic);
            }

        }

        return convertView;
    }

}
...