Адаптер simpleCursor для Android

#android #android-listview #android-cursoradapter

#Android #android-listview #android-cursoradapter

Вопрос:

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

 searchCursor= dbReaderContact.rawQuery(query, null);
startManagingCursor(searchCursor);
String[] from=new String[] {ALDbAdapter.TITLE,DbAdapter.CATID,DbAdapter.LTID,DbAdapter.RK,DbAdapter.SUBTITLE};
                        int [] to=new int[] {R.layout.ctllist_item};
catSearchAdapter=new CategorySearchAdapter(context, R.layout.ctllist_item, searchCursor, from, to);

//////////////Adapter calss

public class CategorySearchAdapter extends SimpleCursorAdapter implements Filterable{

    private Context context;
    private int layout;
    private ALDbAdapter dbadapter;

    /**
     * @param context
     * @param layout
     * @param c
     * @param from
     * @param to
     */
    public CategorySearchAdapter(Context context, int layout, Cursor c, String[] from,  int[] to) {
        super(context, layout, c, from, to);
        this.layout=layout;
        this.context=context;

        dbadapter=new ALDbAdapter(context);
        try {
            dbadapter.openAngiesListDb();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

     @Override
        public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
            if (getFilterQueryProvider() != null) { return getFilterQueryProvider().runQuery(constraint); }

            StringBuilder buffer = null;
            String[] args = null;
            if (constraint != null) {
                buffer = new StringBuilder();
                buffer.append("UPPER(");
                buffer.append("name");
                buffer.append(") GLOB ?");
                args = new String[] { constraint.toString().toUpperCase()   "*" };
            }
            Cursor c=null;
           // c=dbadapter.getPartialNamesSearch(constraint.toString());
            return c;
        }
     @Override
        public void bindView(View v, Context context, Cursor c) {

            TextView subTitle=(TextView)v.findViewById(R.id.ctlName);
            TextView title=(TextView)v.findViewById(R.id.cltAssocationName);
            ImageView imgIcon=(ImageView)v.findViewById(R.id.ctlLogo);

            int subTitInd=c.getColumnIndex(ALDbAdapter.SUBTITLE);
            int titInd=c.getColumnIndex(ALDbAdapter.TITLE);
            int ltId=c.getColumnIndex(ALDbAdapter.LTID);
            int ltype=c.getInt(ltId);
            if(!c.getString(subTitInd).equalsIgnoreCase("")){
                subTitle.setText(c.getString(subTitInd));
                title.setText(c.getString(titInd));
            }else{
                subTitle.setText(c.getString(titInd));
            }
            if(ltype==1){
                imgIcon.setImageResource(R.drawable.logo1);
            }else if(ltype==2){
                imgIcon.setImageResource(R.drawable.logo2); 
            }else{
                imgIcon.setImageResource(R.drawable.logo3); 
            }
        }

}
//On post i closed the cursor
///On Resume

searchCursor= dbReaderContact.rawQuery(query, null);
            startManagingCursor(searchCursor);
  

Комментарии:

1. публикация вашего кода помогла бы!

2. покажите мне свой код …. я могу вам помочь

3. @willytate,@john майк Уилли, не могли бы вы мне сейчас помочь

Ответ №1:

Вы говорите о ListView и использовании SimpleCursorAdapter. Вам не кажется, что создание собственного ArrayAdaptor не более эффективно: вы создаете свой собственный класс для хранения данных, которые вы хотите получить из вашего запроса к БД (выполняете итерацию по вашему курсору), затем вы заполняете ArrayList этого класса. Затем вы передаете этот ArrayList классу, который расширяет ArrayAdaptor. Вы должны сохранить ArrayList в ArrayAdaptor и переопределить contructor и метод общедоступного просмотра getView (int position, View convertView, ViewGroup parent), чтобы создать каждое представление вашего ListView.

Вы можете настроить Google ListView (первый результат:http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters / ).

Комментарии:

1. с адаптером simplecursor нет необходимости поддерживать какой-либо массив, поэтому я использовал его.