Wie man Daten in der Listenansicht dynamisch hinzufügt - android, json, listview, extends

Ich möchte Daten vom Webservice in anzeigen listview dynamisch und es funktioniert perfekt.

Jetzt möchte ich verlängern listview wenn es zu Ende geht (wie Facebook Homepage). Wie mache ich das?

Hinweis: Ich benutze den Json Web Service, um meine Daten aus PHP zu übergeben, und benutze die Listenansicht, um geparste Daten in meiner App anzuzeigen.

Hier ist mein Code:

package info.androidhive.customlistviewvolley.adater;

import info.androidhive.customlistviewvolley.R;
import info.androidhive.customlistviewvolley.app.AppController;
import info.androidhive.customlistviewvolley.model.Movie;

import java.util.List;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnDragListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;

public class CustomListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Movie> movieItems;
ProgressDialog pDialog;
VideoView videoview;
ProgressBar mSpinner;
public static String s1="10";
// Insert your Video URL
String VideoURL;// = "http://demo.cogzideltemplates.com/client/sedio/video/d2b6a230106f355d2eee796863f4088a.mp4";

ImageLoader imageLoader = AppController.getInstance().getImageLoader();

public CustomListAdapter(Activity activity, List<Movie> movieItems) {
this.activity = activity;
this.movieItems = movieItems;
}

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

@Override
public Object getItem(int location) {
return movieItems.get(location);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_row, null);

convertView.setClickable(true);

if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();

NetworkImageView thumbNail = (NetworkImageView) convertView
.findViewById(R.id.thumbnail);
TextView title = (TextView) convertView.findViewById(R.id.title);
TextView rating = (TextView) convertView.findViewById(R.id.rating);
TextView genre = (TextView) convertView.findViewById(R.id.genre);
TextView year = (TextView) convertView.findViewById(R.id.releaseYear);
//TextView desc = (TextView) convertView.findViewById(R.id.desc);
videoview=(VideoView) convertView.findViewById(R.id.VideoView);
mSpinner=(ProgressBar) convertView.findViewById(R.id.progressBar1);

Movie m = movieItems.get(position);
VideoURL=m.getvideoUrl();
videoview.setVideoURI(Uri.parse(VideoURL));
// videoview.setMediaController(new MediaController(this));
videoview.requestFocus();
// mSpinner.setVisibility(View.GONE);
videoview.setOnPreparedListener(new OnPreparedListener() {
// Close the progress bar and play the video
public void onPrepared(MediaPlayer mp) {
//pDialog.dismiss();
mSpinner.setVisibility(View.GONE);
videoview.start();
}
});


//videoview.setLayoutParams(new FrameLayout.LayoutParams(550,550));

//    videoview.start();

// Execute StreamVideo AsyncTask


//mSpinner.setVisibility(View.VISIBLE);

//play video

// Start the MediaController

//mediacontroller.setAnchorView(videoview);
// Get the URL from String VideoURL
//  Uri video = Uri.parse(VideoURL);
//videoview.setMediaController(mediacontroller);
//  videoview.setVideoURI(video);

//videoview.requestFocus();

// Close the progress bar and play the video

//videoview.start();

// getting movie data for the row

// thumbnail image
thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);

// title
title.setText(m.getTitle());

// rating
rating.setText(m.getDate());

//desc.setText(m.getdesc());
// release year
year.setText(String.valueOf(m.getYear()));

return convertView;
}
}

Antworten:

0 für die Antwort № 1

Hier ist mein Ansatz:

Ich fange die onScroll des ListView und laden Sie mehr Artikel, wenn es benötigt wird.
In meinem Fall lade ich mehr, wenn ich zur Hälfte des gesehenen Produktes blolle

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if ((task == null || task.getStatus() == AsyncTask.Status.FINISHED) && productHolder.hasProductRemainsToBeLoad() &&
productHolder.getProducts().size() - (Config.PRODUCT_NUMBER_PER_PAGE/2) < firstVisibleItem + visibleItemCount){
loadProduct();
}
}

Hier ist Aufgabe Asynctask die einen Webservice anrufen.
Dann benachrichtigen Sie Ihren Adapter

adapter.notifyDataSetChanged();


0 für die Antwort № 2

Listviews haben einen Listener, der die Position des Scrolls überprüft. Der folgende Code wird Ihnen helfen zu überprüfen, ob Sie am Ende Ihrer sind ListView.

Zuerst mach dein Activity von Fragment implementiert OnScrollListener. Dann füge hinzu

private int preLast;
// Initialization stuff.
yourListView.setOnScrollListener(this);



@Override
public void onScroll(AbsListView lw, final int firstVisibleItem,
final int visibleItemCount, final int totalItemCount) {

switch(lw.getId()) {
case R.id.yourIDListview:

final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount) {
if(preLast!=lastItem){ //to avoid multiple calls for last item
//LOAD MORE ITEMS
preLast = lastItem;
}
}
}
}

0 für die Antwort № 3

Sie können es mit OnScrollListener erreichen.

 listview.setOnScrollListener(new OnScrollListener(){

@Override
public void onScroll(AbsListView view,int firstVisibleItem, int visibleItemCount,int totalItemCount) {
//Algorithm to check if the last item is visible or not
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount){
// you have reached end of list, load more data
//Toast.makeText(getApplicationContext(), "You have reached last item!", Toast.LENGTH_SHORT).show();
//Sent_details.clear();
//In here give a call to database and take another 5 posts and notify the listview
//adapter.notifyDataSetChanged();

}
}

@Override
public void onScrollStateChanged(AbsListView view,int scrollState) {
//blank, not using this
}
});

Verwandte Fragen