Przekazywanie zmiennych do onClickListener'a

0

Witam,
mam problem z przekazaniem zmiennej List<object> do onClickListenera

W oncreate wpisuje wartości z bazy danych, lista wyświetla i działa (kod poniżej)

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_food_with_list_view);
        //resources lista arrays for adapter
        foodResources = new ArrayList<>();

        listView = (ListView)findViewById(R.id.listView);
        searchBox = (EditText)findViewById(R.id.editText);
        searchButton = (Button)findViewById(R.id.button12);


        BazaFoodListOfFood db = new BazaFoodListOfFood(AddFoodWithListView.this);
        final Cursor cursor = db.getAll();
        String foodDesc;
        cursor.moveToFirst();
        do{
            foodDesc = cursor.getString(0);
            foodResources.add(new foodResData(
                    foodDesc,
                    cursor.getString(1),
                    cursor.getString(2),
                    cursor.getString(3),
                    cursor.getString(4),
                    cursor.getString(5),
                    cursor.getString(6),
                    cursor.getString(7)
            ));
        }while (cursor.moveToNext()); 

Tutaj jest OnClickListener, który znajduje się w Oncreate:

 
final List<foodResData> data = foodResources;
searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(searchBox.getText().toString().length()!=0){
                    List<foodResData> foodResourcesHelper;
                    foodResourcesHelper = data;
                    SearchEngine searchEngine = new SearchEngine();
                    foodResources.clear();
                    superResources.clear();
                    int dlg = foodResourcesHelper.size();
                    for(int i = 0 ; i<dlg; i++){
                        if(searchEngine.find(foodResourcesHelper.get(i).getDescription(),searchBox.getText().toString())) foodResources.add(foodResourcesHelper.get(i));
                    }


                    Log.v("checkpoint","LOL");
                    listView.invalidateViews();
                }else Toast.makeText(getApplicationContext(),"Fill search box",Toast.LENGTH_SHORT).show();
            }
        });

Jak sprawdzam debugerem to lista w Listenerze jest pusta pomimo przypisani. W aplikacji gdy klikne przycisk lista się czyści (wykonują się funkcje clear, próbując wywołać element listy w onclick listenerze np: 5 dostaje out of bounds exception)

Z góry dzięki za pomoc :D

P.S. - identyczny problem występuje w OnTextChangeListener :(

0

dobra wszystko jasne, zmien w OnClickListnerze z

foodResourcesHelper = data;

na

foodResourcesHelper = foodResources;

albo zadeklaruj jako pole finalne data (tzn widoczne w całej klasie)

po prostu próbujesz się odwołać do zmiennej lokalnej z onCreate której już nie ma jak przejedzie przez tą funkcję

pzdr

0

Udało się, problem leżał w bardzo prostej rzeczy, sprawdziłem Logami że foodresources wyświetla wartości i ma długość, okazuje się że przepisanie Listy

List<customObj> obj1, obj2;
obj1= new ArrayList<>();
obj2 = new ArrayList<>();

obj1.add(new customObj);

obj2= obj1;//tak nie zadziała nie wiem w sumie czemu 

obj2.get(0);//tu będzie null

nie działa w taki sposób

problem błachy, a cały program rozwalony :D

P.S. Optymalizacji w wyszukiwaniu wciąż brak, strasznie przycina nawet na Nexusie 4, który jest dość dobry :(

0

Postawiłeś błędną diagnozę. Kod, który podałeś działa zgodnie z oczekiwaniami, tu:

obj2.get(0);

nie będzie nulla. Zakładam, że źle przepisałeś kod na forum, a w rzeczywistości jest

obj1.add(new customObj());

1 użytkowników online, w tym zalogowanych: 0, gości: 1