0

我知道有很多关于这个主题的文档,但是我对无穷无尽的 ListView 有疑问。在用户滚动之前,每一行都必须显示一个 ProgressBar,但它不会成功。当应用程序启动时,所有元素都被加载,所有 ProgressBar 消失。这是所有的代码。

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();
    }


}

这是关键代码:

    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));

    }

}

问候。

4

0 回答 0