Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无休止的listview对每个元素收费_Java_Android_Endlessadapter - Fatal编程技术网

Java 无休止的listview对每个元素收费

Java 无休止的listview对每个元素收费,java,android,endlessadapter,Java,Android,Endlessadapter,我知道有很多关于这个主题的文档,但是我对没完没了的ListView有一个问题。在用户滚动之前,每一行必须显示一个进度条,但它不会成功。当应用程序启动时,所有元素都会加载到ProgressBar中。这是所有的代码 public class MainActivity extends Activity implements EndlessListView.EndlessListener{ EndlessListView lv; List<String> listOfEle

我知道有很多关于这个主题的文档,但是我对没完没了的ListView有一个问题。在用户滚动之前,每一行必须显示一个进度条,但它不会成功。当应用程序启动时,所有元素都会加载到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();
    }


}
公共类MainActivity扩展活动实现EndlessListView.EndlessListener{
无端滑动视图lv;
元素列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
RelativeLayout布局=新的RelativeLayout(此);
lv=新的EndlessListView(本);
listOfElements=fillList();

EndlessAdapter adp=新的EndlessAdapter(这是元素列表,-1); lv.setLoadingView(); 低压设置适配器(adp); 低压填充适配器(元件清单); lv.setListener(this); 布局。添加视图(lv); setContentView(布局); } 公共列表fillList(){ 列表元素=新的ArrayList(); 对于(int i=0;i<200;i++){ 元素列表。添加(“元素”+i); } 返回元素列表; } } 公共类EndlessListView扩展了ListView{ 语境; 私密的听者; 专用EndlessAdapter适配器; 公共EndlessListView(上下文上下文、属性集属性、int-defStyle){ 超级(上下文、属性、定义样式); } 公共EndlessListView(上下文、属性集属性){ 超级(上下文,attrs); } 公共EndlessListView(上下文){ 超级(上下文); } 公共void setContext(上下文){ this.context=上下文; } public void setLoadingView(){ LinearLayout布局=新的LinearLayout(super.getContext()); //此.addView(布局); } 公共void setAdapter(EndlessAdapter适配器){ super.setAdapter(适配器); this.adapter=适配器; } public EndlessListener setListener(){ 返回侦听器; } 公共void setListener(EndlessListener侦听器){ this.listener=listener; } 公共静态接口EndlessListener{ } 公共无效填充适配器(列表数据){ adapter.addAll(数据); 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));

    }

}
公共类EndlessAdapter扩展了ArrayAdapter{
私人清单项目清单;
私有上下文ctx;
私人内部布局;
公共EndlessAdapter(上下文ctx、列表项列表、int-layoutId){
超级(ctx、布局ID、项目列表);
this.itemList=itemList;
this.ctx=ctx;
}
@凌驾
public int getCount(){
返回itemList.size();
}
@凌驾
公共字符串getItem(int位置){
返回itemList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回itemList.get(position.hashCode();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
TextView tv=新的TextView(ctx);
ProgressBar pg=新的ProgressBar(ctx);
if(convertView==null){
电视=新文本视图(ctx);
pg=新进度条(ctx);
convertView=pg;
}否则{
pg=(进度条)转换视图;
}
//tv.setText(itemList.get(position));
FakeImageLoader fake=新的FakeImageLoader(电视、pg、位置);
fake.execute();
System.out.println(“Me estoy pintando y soy el elemento”
+itemList.get(position));
返回视图;
}
私有类FakeImageLoader扩展异步任务{
私家图文电视;
私人ProgressBar pg;
私人职位;
公共FakeImageLoader(文本视图电视,
进度条pg,int位置){
this.tv=tv;
this.pg=pg;
这个位置=位置;
}
受保护的void onPreExecute(){
}
受保护的TextView doInBackground(字符串…参数){
试一试{
睡眠(1000);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回项目(位置);
}
受保护的void onPostExecute(文本视图文本){
电视=文本;
添加新数据(电视、pg、位置);
}
公共文本视图createItem(int位置){
TextView text=新的TextView(ctx);
setText(itemList.get(position));
System.out.println(itemList.get(position));
text.setTextSize(20);
返回文本;
}
}
public void addNewData(文本视图文本、进度条pg、int位置){
系统输出打印项次(“Entra”);
pg.setVisibility(视图不可见);
setText(itemList.get(position));
}
}

注意。

您没有在关键代码中正确实现视图持有者模式意味着getViewEndlessAdapter adp=new EndlessAdapter(这是元素列表,-1);为什么要使用-1作为布局?