0

I know there are a lot of documentation about this topic, but I have a problem with the endless ListView. Each row must show a ProgressBar until the user scrolls, but it doesn't success. When the app starts, all the elements are loaded disappearing all the ProgressBar. Here is all the code.

public class MainActivity extends Activity implements EndlessListView.EndlessListener{

    EndlessListView lv;
    List<String> listOfElements;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        RelativeLayout layout = new RelativeLayout(this);

        lv = new EndlessListView(this);
        listOfElements = fillList();

        EndlessAdapter adp = new EndlessAdapter(this, listOfElements,-1); 

        lv.setLoadingView();
        lv.setAdapter(adp);
        lv.fillAdapter(listOfElements);
        lv.setListener(this);

        layout.addView(lv);


        setContentView(layout);
    }


    public List<String> fillList(){
        List<String> listOfElements = new ArrayList<String>();
        for (int i = 0; i < 200; i++) {
            listOfElements.add("Element "+i );
        }
        return listOfElements;
    }

}


public class EndlessListView extends ListView{

    Context context;
    private EndlessListener listener;
    private EndlessAdapter adapter;


    public EndlessListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public EndlessListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EndlessListView(Context context) {
        super(context);
    }

    public void setContext(Context context){
        this.context = context;
    }

    public void setLoadingView() {

        LinearLayout layout = new LinearLayout(super.getContext());

        //this.addView(layout);
    }


    public void setAdapter(EndlessAdapter adapter) {
        super.setAdapter(adapter);
        this.adapter = adapter;
    }


    public EndlessListener setListener() {
        return listener;
    }

    public void setListener(EndlessListener listener) {
        this.listener = listener;
    }

    public static interface EndlessListener {

    }

    public void fillAdapter(List<String> data){
        adapter.addAll(data);
        adapter.notifyDataSetChanged();
    }


}

And this is the critical code:

    public class EndlessAdapter extends ArrayAdapter<String> {

    private List<String> itemList;
    private Context ctx;
    private int layoutId;

    public EndlessAdapter(Context ctx, List<String> itemList, int layoutId) {
        super(ctx, layoutId, itemList);
        this.itemList = itemList;
        this.ctx = ctx;
    }

    @Override
    public int getCount() {
        return itemList.size();
    }

    @Override
    public String getItem(int position) {
        return itemList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return itemList.get(position).hashCode();
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        TextView tv = new TextView(ctx);
        ProgressBar pg = new ProgressBar(ctx);

        if (convertView == null) {
            tv = new TextView(ctx);
            pg = new ProgressBar(ctx);
            convertView = pg;


        } else {
            pg = (ProgressBar) convertView;
        }
        //tv.setText(itemList.get(position));
        FakeImageLoader fake = new FakeImageLoader(tv, pg, position);
        fake.execute();
        System.out.println("Me estoy pintando y soy el elemento "
                + itemList.get(position));

        return convertView;
    }





    private class FakeImageLoader extends AsyncTask<String, Void, TextView> {

        private TextView tv;
        private ProgressBar pg;
        private int position;

        public FakeImageLoader(TextView tv,
                ProgressBar pg, int position) {
            this.tv = tv;
            this.pg = pg;
            this.position = position;
        }

        protected void onPreExecute() {


        }

        protected TextView doInBackground(String... params) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return createItem(position);
        }

        protected void onPostExecute(TextView text) {
            tv = text;
            addNewData(tv, pg,position);
        }

        public TextView createItem(int position) {
            TextView text = new TextView(ctx);
            text.setText(itemList.get(position));
            System.out.println(itemList.get(position));
            text.setTextSize(20);
            return text;
        }

    }

    public void addNewData(TextView text, ProgressBar pg, int position) {

        System.out.println("Entra");
        pg.setVisibility(View.INVISIBLE);
        text.setText(itemList.get(position));

    }

}

Regards.

Tushar
  • 3,527
  • 9
  • 27
  • 49
Viherbar
  • 239
  • 3
  • 13

0 Answers0