सूची दृश्य में डेटा को गतिशील रूप से कैसे जोड़ें - एंड्रॉइड, जेसन, सूचीदृश्य, विस्तारित करता है

मैं webservice से डेटा प्रदर्शित करना चाहता हूँ listview गतिशील रूप से और इसका काम पूरी तरह से।

अब मैं विस्तार करना चाहता हूं listview जब यह खत्म हो जाता है (जैसे फेसबुक होम पेज)। मैं यह कैसे करु?

नोट: मैं PHP से अपना डेटा पास करने के लिए जेसन वेब सेवा का उपयोग कर रहा हूं, और मेरे ऐप में पार्स किए गए डेटा को प्रदर्शित करने के लिए सूची दृश्य का उपयोग कर रहा हूं।

मेरा कोड यहाँ है:

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

उत्तर:

जवाब के लिए 0 № 1

मेरा दृष्टिकोण यहां है:

मैं पकड़ता हूँ onScroll का ListView और यदि आवश्यक हो तो अधिक आइटम लोड करें।
अगर मैं उत्पाद के आधा भाग तक स्क्रॉल करता हूं तो मेरे मामले में मैं और अधिक लोड करता हूं

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

यहां कार्य एक है Asynctask जो एक webservice कहते हैं।
फिर अपने एडाप्टर को सूचित करें

adapter.notifyDataSetChanged();


जवाब के लिए 0 № 2

सूचीदृश्य में स्क्रॉल की स्थिति की जांच करने के लिए एक श्रोता होता है। निम्नलिखित कोड आपको यह जांचने में मदद करेगा कि आप अपने अंत में हैं या नहीं ListView

पहले अपना बनाओ Activity का Fragment औजार OnScrollListener। फिर जोड़िए

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 № 3

आप ऑनस्क्रॉल लिस्टर का उपयोग कर इसे प्राप्त कर सकते हैं।

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

संबंधित सवाल
सबसे लोकप्रिय