Невозможно обновить Listview и notifyDataSetChanged (), также не работающие с SeekBar - PullRequest
0 голосов
/ 27 июня 2019

Реализован ListView и загружен первый набор данных Listview, основанный на seekBar onProgressChanged Следующие значения должны быть обновлены. Пробовал с notifyDataSetChanged () и все решения в стеке, но не работает. Или как я могу сделать так, чтобы Listview обновлялся после загрузки данных второго набора вместо любого решения, кроме notifyDataSetChange, потому что нужно просто изменить только некоторую часть значений.

Код SeekBar

@Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                                      boolean fromUser) {

        String number = jsonDates.get(progress);
        System.out.println("number:"+number);

        // Date dateObj = dateFormat.parse(number);

        if(oldIndex != progress){

            transFunction();

            ```customAdapter.notifyDataSetChanged();```

            oldIndex = progress;

        }

        // selectedTxtFld.setText(String.valueOf(progress));

    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        //Toast.makeText(getApplicationContext(),"seekbar touch started!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
       // Toast.makeText(getApplicationContext(),"seekbar touch stopped!", Toast.LENGTH_SHORT).show();

    }
});

Функция (фрагмент вызова API)

public Void transFunction(){

 RequestQueue reqQueue = Volley.newRequestQueue(this);

            reqQueue.add(new StringRequest(Request.Method.POST, url, new Response.Listener<String>(){
                @Override
                public void onResponse(String response) {
                    // spinner.setVisibility(View.VISIBLE);

                    Log.d(TAG, response);
                    if (response != null){
                        try {
                            System.out.println("We are in JsonObject");
                            JSONObject jsonObject = new JSONObject(response);
                            System.out.println("Got Json Object"+jsonObject);

                           // Arrays.fill(nameString, null);
                            absValuesArray.clear();
                            diffValuesArray.clear();
                            currValArray.clear();
                            prevValArray.clear();
                            jsonDates.clear();
                            indData.clear();

       ListView listView = (ListView)  findViewById(R.id.mobile_list);
                            listView.setAdapter(customAdapter);

}

Пользовательский адаптер

class CustomAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return nameString.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {

            view = getLayoutInflater().inflate(R.layout.custom_layout,null);

//            ImageView

            if (i % 2 == 1) {
                view.setBackgroundColor(Color.parseColor("#E1E1E1F0"));
            } else {
                view.setBackgroundColor(Color.parseColor("#ffffff"));
            }


            System.out.println("nameString_lenth"+nameString.length);
            System.out.println("currArrayObject"+currArrayObject.length);
            System.out.println("diffArrayObject"+diffArrayObject.length);

            TextView textView_name = (TextView)view.findViewById(R.id.textview);
            TextView textView_current = (TextView)view.findViewById(R.id.textview2);
            TextView textView_difference = (TextView)view.findViewById(R.id.textview3);
            ImageView transImageView = (ImageView)view.findViewById(R.id.transimage);


            textView_name.setText(nameString[i]);
            textView_current.setText(currArrayObject[i]);
            textView_difference.setText(diffArrayObject[i]);
            //transImageView.setImage =


            return view;
        }
    }

1 Ответ

0 голосов
/ 27 июня 2019

Я вижу две проблемы:

1) вы не должны устанавливать адаптер на ListView каждый раз, когда вызывается ваш метод transFunction.Вам нужно установить адаптер один раз.Предпочтительно, когда вы инициализируете вашу ListView.

2) ваша реализация Adapter не верна.Вы не возвращаете товар и не возвращаете его.Вам следует сделать что-то вроде этого:

@Override
public Object getItem(int position) {
    return items.get(position); 
}

@Override
public long getItemId(int position) {
    return position;
}

В этом руководстве показан пример использования ListView с BaseAdapter.

...