проблема с просмотром товаров в Android-магазине - PullRequest
0 голосов
/ 20 апреля 2011

Привет всем!
У меня проблема в приложении для Android. Я пытаюсь сделать приложение со списком покупок. Я попытался сделать 2 списка покупок в своем приложении, каждый из которых со своими предметами. Когда я вижу элементы списка, я использую SimpleCursorAdapter. Проблема в том, что если я хочу увидеть элементы второго списка, я вижу его элементы, а также первый. Что я должен делать? Все заголовки списков хранятся в таблице, а все элементы хранятся в другой таблице. Вот мой класс Все идеи приветствуются.
Спасибо.

Мой код:

public class Produse extends Activity{

    TextView selection;
    String titlelist;
    String id;
    private ProductDbAdapter prod;
    private ListDbAdapter db;
    private SimpleCursorAdapter adapter;
    private ListView lv;

    private static final int MENU_ADD = Menu.FIRST;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.produse);

        selection=(TextView)findViewById(R.id.text);
        lv=(ListView)findViewById(R.id.listprod); 

        Bundle bundle = getIntent().getExtras();
        titlelist = bundle.getString("param1");
        id=bundle.getString("param2"); 
        selection.setText(titlelist);

        db=new ListDbAdapter(this);
        db.open();  

        prod=new ProductDbAdapter(this);
        prod.open();
        populate();
        prod.close();        
        db.close();
    }

    public boolean onCreateOptionsMenu(Menu menu) {    
        menu.add(0, MENU_ADD, 0, "Add Item"); 
        return true;
    }

    public boolean onOptionsItemSelected (MenuItem item) {    
        switch (item.getItemId()) {    
            case MENU_ADD:        
                additem();
                return true;  
        }
        return false;
    }
    public void additem() {
        Intent j= new Intent(Produse.this, List2.class);
        j.putExtra("param2", id);
        startActivity(j);   
    }

    private void populate(){
        Cursor c=prod.fetchAll();
        startManagingCursor(c);

        if (c.moveToFirst()){
               do{
                if (id.toString().equals(c.getString(1)))

                    adapter=new SimpleCursorAdapter(this,R.layout.listproduct,c,
                new String[] {ProductDbAdapter.KEY_ITEM,ProductDbAdapter.KEY_QUANTITY,ProductDbAdapter.KEY_UNITS},
                new int[] {R.id.prod1,R.id.prod2,R.id.prod3});
               }while (c.moveToNext());
         lv.setAdapter(adapter);
            }

    }


}

1 Ответ

0 голосов
/ 30 апреля 2011

Хм, что-то, что выглядит совершенно неверно, - это то, что вы переназначаете свой адаптер внутри цикла. Я думаю, что ТОЧКА адаптеров курсора заключается в том, что вам не нужно перебирать курсор, это работа адаптера. Итак, я думаю, вам нужно изменить свой заполненный код на что-то вроде этого:

private void populate(){
        Cursor c=prod.fetchAll();
        startManagingCursor(c);
        adapter=new SimpleCursorAdapter(this,R.layout.listproduct,c,
                new String[] {ProductDbAdapter.KEY_ITEM,ProductDbAdapter.KEY_QUANTITY,ProductDbAdapter.KEY_UNITS},
                new int[] {R.id.prod1,R.id.prod2,R.id.prod3});
        lv.setAdapter(adapter);
    }
...