Java 使用滚动加载更多向listview添加数据
我正在使用这个库:当滚动到最后时,在我的lisview中添加项目。事实上它是有效的。它加载新数据,但不将其“附加”到listview。它只需重新加载一个新列表。我需要在旧库中添加我的新数据!这就是我到目前为止所做的: 我宣布:Java 使用滚动加载更多向listview添加数据,java,android,listview,android-listview,scroll,Java,Android,Listview,Android Listview,Scroll,我正在使用这个库:当滚动到最后时,在我的lisview中添加项目。事实上它是有效的。它加载新数据,但不将其“附加”到listview。它只需重新加载一个新列表。我需要在旧库中添加我的新数据!这就是我到目前为止所做的: 我宣布: String[] provaArr; private LinkedList<String> mList; String[]provaArr; 私有链接列表; 然后: mList=newlinkedlist(); provaArr=(titoli.t
String[] provaArr;
private LinkedList<String> mList;
String[]provaArr;
私有链接列表;
然后:
mList=newlinkedlist();
provaArr=(titoli.toArray(新字符串[0]);
mList.addAll(Arrays.asList(provaArr));
lista=(LoadMoreListView)view.findViewById(R.id.main\u lista);
setOnLoadMoreListener(新的OnLoadMoreListener(){
public void onLoadMore(){
新建ParsingSecondPage().execute();
}
});
和任务:
private class ParsingSecondPage extends AsyncTask<String,String,String> {
@Override
protected void onPreExecute()
{
//prima di eseguire il parsing inizializzo gli arraylist
super.onPreExecute();
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setTitle("Loading");
mProgressDialog.setMessage("please wait...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
mProgressDialog.setCanceledOnTouchOutside(false);
titoli = new ArrayList<String>();
data = new ArrayList<String>();
categoria = new ArrayList<String>();
Lurl = new ArrayList<String>();
}
@Override
protected String doInBackground(String... params) {
if (isCancelled()){
return null;
}
try {
current += 1;
BLOG_URL_SECOND = "http://www.page.it/articoli/?pagina="+current;
Document doc = Jsoup.connect(BLOG_URL_SECOND)
.get();
Elements sezioni = doc.getElementsByClass("archive_box");
for (Element riga : sezioni) {
Element info = riga.getElementsByClass("text").first();
// Title
titolo = riga.select("h2").text();
titoli.add(titolo);
// Url
String urltitle = riga.select("h2 a").first().attr("abs:href");
Lurl.add(urltitle);
// Date
String date = info.getElementsByClass("date").first().text();
System.out.println(date);
data.add(date);
// categoria
String category = info.getElementsByClass("category").first().text();
System.out.println(category);
categoria.add(category);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 0; i < provaArr.length; i++)
mList.add(provaArr[i]);
return null;
}
@Override
protected void onPostExecute(String result)
{
adapter.notifyDataSetChanged();
lista.onLoadMoreComplete();
new LogoSecond().execute();
mProgressDialog.dismiss();
}
}
私有类ParsingSecondPage扩展异步任务{
@凌驾
受保护的void onPreExecute()
{
//prima di eseguire il il Izzo gli arraylist
super.onPreExecute();
mProgressDialog=newprogressdialog(getActivity());
mProgressDialog.setTitle(“加载”);
设置消息(“请稍候…”);
mProgressDialog.setUndeterminate(false);
mProgressDialog.show();
mProgressDialog.setCanceledOnTouchOutside(false);
titoli=新的ArrayList();
数据=新的ArrayList();
categoria=新的ArrayList();
Lurl=新数组列表();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
如果(isCancelled()){
返回null;
}
试一试{
电流+=1;
BLOG_URL_SECOND=”http://www.page.it/articoli/?pagina=“+电流;
Document doc=Jsoup.connect(BLOG\u URL\u秒)
.get();
Elements sezioni=doc.getElementsByClass(“存档盒”);
对于(元素里加:塞齐奥尼){
Element info=riga.getElementsByClass(“text”).first();
//头衔
titolo=riga.select(“h2”).text();
添加(titolo);
//网址
字符串urlttitle=riga.select(“h2 a”).first().attr(“abs:href”);
加上(标题);
//日期
字符串日期=info.getElementsByClass(“日期”).first().text();
系统输出打印项次(日期);
数据。添加(日期);
//范畴
字符串category=info.getElementsByClass(“category”).first().text();
系统输出打印项次(类别);
类别。添加(类别);
}
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
for(int i=0;i
因此,当我到达页面末尾时,它调用AsynkTask,但添加项目,并用新数据重新加载页面
适配器:
public class ParsingArrayAdapter extends ArrayAdapter<String>{
private final static int LAYOUT = R.layout.riga_listview;
private final static int TITOLO = R.id.riga_listview_titolo;
private final static int DATA = R.id.riga_listview_data;
private final static int CATEGORIA = R.id.riga_listview_categoria;
private final static int IMMAGINE = R.id.imageView1;
ArrayList<Bitmap> bitmap;
ArrayList<String> links;
ArrayList<String> titoli;
ArrayList<String> data;
ArrayList<String> categoria;
Context c;
LayoutInflater inflater;
public ParsingArrayAdapter(Context context,ArrayList<String> titoli, ArrayList<Bitmap> bitmap, ArrayList<String> data, ArrayList<String> categoria)
{
super(context,TITOLO);
this.c = context;
this.titoli = titoli;
this.data = data;
this.categoria = categoria;
this.bitmap = bitmap;
this.inflater = LayoutInflater.from(c);
}
@Override
public int getCount()
{
return titoli.size();
}
//quando la lista richiede una view
@SuppressLint("NewApi")
@Override
public View getView(int pos,View view,ViewGroup parent)
{
CacheRiga cache;
if(view==null)
{
view = inflater.inflate(LAYOUT, parent,false);
cache = new CacheRiga(); //inizializzo la cache
cache.titolo = (TextView) view.findViewById(TITOLO); //collego titolo
cache.dateArticoli = (TextView) view.findViewById(DATA); //collego la data
cache.categoriatext = (TextView) view.findViewById(CATEGORIA); //collego la data
cache.immagini = (ImageView) view.findViewById(IMMAGINE);//collego descrizione
view.setTag(cache);//collego view con cache
}
else
{
cache = (CacheRiga) view.getTag();
}
if (this.titoli.size() > 0 && pos < this.titoli.size()){
cache.titolo.setText(titoli.get(pos)); //imposto il titolo
}
if (this.data.size() > 0 && pos < this.data.size()){
cache.dateArticoli.setText(data.get(pos));
}
cache.categoriatext.setText(categoria.get(pos));
cache.immagini.setImageBitmap(bitmap.get(pos));
if (bitmap!=null){
Log.d("Bitmap MP.it", "BitmapNOTnull");
}else{
Log.d("Bitmap null MP.it", "Bitmapnull");
}
if (data!=null){
Log.d("Data", "Data NOT null");
}else{
Log.d("Data", "Data null");
}
return view;
}
private class CacheRiga { // classe per la cache delle righe
public TextView titolo; // cache titolo
public TextView dateArticoli; // cache data
public TextView categoriatext; // cache categoria
public ImageView immagini; // cache descrizione
}
公共类ParsingArrayAdapter扩展ArrayAdapter{
私有最终静态int-LAYOUT=R.LAYOUT.riga_listview;
私有最终静态int TITOLO=R.id.riga_listview_TITOLO;
私有最终静态int DATA=R.id.riga_listview_DATA;
私有最终静态int CATEGORIA=R.id.riga_listview_CATEGORIA;
私有最终静态int IMMAGINE=R.id.imageView1;
阵列列表位图;
ArrayList链接;
ArrayList titoli;
阵列列表数据;
ArrayList分类;
上下文c;
充气机;
公共ParsingArrayAdapter(上下文上下文、ArrayList标题、ArrayList位图、ArrayList数据、ArrayList分类)
{
超级(上下文,TITOLO);
c=上下文;
this.titoli=titoli;
这个数据=数据;
this.categoria=categoria;
this.bitmap=位图;
此充气器=来自(c)的充气器;
}
@凌驾
public int getCount()
{
返回titoli.size();
}
//丽希德观景酒店
@SuppressLint(“新API”)
@凌驾
公共视图getView(int pos、视图视图、视图组父视图)
{
CacheRiga缓存;
如果(视图==null)
{
视图=充气机。充气(布局、父级、假);
cache=new CacheRiga();//缓存
cache.titolo=(TextView)view.findViewById(titolo);//colego titolo
cache.dateArticoli=(TextView)view.findViewById(数据);//colego la DATA
cache.categatext=(TextView)view.findviewbyd(categia);//collego la data
cache.immagini=(ImageView)view.findviewbyd(IMMAGINE);//collego descripione
view.setTag(缓存);//collego view con缓存
}
其他的
{
cache=(CacheRiga)view.getTag();
}
if(this.titoli.size()>0&&pos0&&pospublic class ParsingArrayAdapter extends ArrayAdapter<String>{
private final static int LAYOUT = R.layout.riga_listview;
private final static int TITOLO = R.id.riga_listview_titolo;
private final static int DATA = R.id.riga_listview_data;
private final static int CATEGORIA = R.id.riga_listview_categoria;
private final static int IMMAGINE = R.id.imageView1;
ArrayList<Bitmap> bitmap;
ArrayList<String> links;
ArrayList<String> titoli;
ArrayList<String> data;
ArrayList<String> categoria;
Context c;
LayoutInflater inflater;
public ParsingArrayAdapter(Context context,ArrayList<String> titoli, ArrayList<Bitmap> bitmap, ArrayList<String> data, ArrayList<String> categoria)
{
super(context,TITOLO);
this.c = context;
this.titoli = titoli;
this.data = data;
this.categoria = categoria;
this.bitmap = bitmap;
this.inflater = LayoutInflater.from(c);
}
@Override
public int getCount()
{
return titoli.size();
}
//quando la lista richiede una view
@SuppressLint("NewApi")
@Override
public View getView(int pos,View view,ViewGroup parent)
{
CacheRiga cache;
if(view==null)
{
view = inflater.inflate(LAYOUT, parent,false);
cache = new CacheRiga(); //inizializzo la cache
cache.titolo = (TextView) view.findViewById(TITOLO); //collego titolo
cache.dateArticoli = (TextView) view.findViewById(DATA); //collego la data
cache.categoriatext = (TextView) view.findViewById(CATEGORIA); //collego la data
cache.immagini = (ImageView) view.findViewById(IMMAGINE);//collego descrizione
view.setTag(cache);//collego view con cache
}
else
{
cache = (CacheRiga) view.getTag();
}
if (this.titoli.size() > 0 && pos < this.titoli.size()){
cache.titolo.setText(titoli.get(pos)); //imposto il titolo
}
if (this.data.size() > 0 && pos < this.data.size()){
cache.dateArticoli.setText(data.get(pos));
}
cache.categoriatext.setText(categoria.get(pos));
cache.immagini.setImageBitmap(bitmap.get(pos));
if (bitmap!=null){
Log.d("Bitmap MP.it", "BitmapNOTnull");
}else{
Log.d("Bitmap null MP.it", "Bitmapnull");
}
if (data!=null){
Log.d("Data", "Data NOT null");
}else{
Log.d("Data", "Data null");
}
return view;
}
private class CacheRiga { // classe per la cache delle righe
public TextView titolo; // cache titolo
public TextView dateArticoli; // cache data
public TextView categoriatext; // cache categoria
public ImageView immagini; // cache descrizione
}