2016-03-03 34 views
-1

主要activty.java 我正在使用排球庫。 在這裏,我試圖做的是負載卡上的意見10個圖像,直到用戶到達末如何在Recyclerview上無限滾動?

public class MainActivity extends ActionBarActivity { 

    private RecyclerView mRecyclerView; 
    private RecyclerView.Adapter mAdapter; 
    private RecyclerView.LayoutManager mLayoutManager; 
    String loginURL="http://*****o.comli.com/rimgid.php"; 
    RequestQueue requestQueue; 
    String[] title=null,url=null; 
    int i=0; 
    Activity activity= MainActivity.this; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this); 
     mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     mRecyclerView.setHasFixedSize(true); 
     mLayoutManager = new LinearLayoutManager(this); 
     mRecyclerView.setLayoutManager(linearLayoutManager); 
     mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 
     linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     requestQueue = Volley.newRequestQueue(this); 
     //output = (TextView) findViewById(R.id.hi); 
     JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET, loginURL, 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 

         try{ 

          JSONArray ja = response.getJSONArray("hi");//parsing id and image url 
          title=new String[ja.length()]; 
          url=new String[ja.length()]; 
          for(int i=0; i < ja.length(); i++){ 

           JSONObject jsonObject = ja.getJSONObject(i); 

           // int id = Integer.parseInt(jsonObject.optString("id").toString()); 
           url[i] ="http://developer.andrinfo.comli.com/img/"+ jsonObject.getInt("id")+".jpg"; 

           title[i] = jsonObject.getString("name"); 


          } 
          mAdapter = new MyRecyclerViewAdapter(activity,getDataSet(url,title,ja.length())); 
          mRecyclerView.setAdapter(mAdapter); 
          // Toast.makeText(getApplicationContext(),url[2],Toast.LENGTH_SHORT).show(); 
          //output.setText(data); 
         }catch(JSONException e){e.printStackTrace();} 
        } 

       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Log.e("Volley",error.toString()); 

        } 
       } 
     ); 
     requestQueue.add(jor); 

     //requestQueue.start(); 
     // Code to Add an item with default animation 
     //((MyRecyclerViewAdapter) mAdapter).addItem(obj, index); 

     // Code to remove an item with default animation 
     //((MyRecyclerViewAdapter) mAdapter).deleteItem(index); 
    } 




    private ArrayList<DataObject> getDataSet(String[] images,String[] headlines,int size) { 
     // String[] images = getResources().getStringArray(R.array.images_array); 
     //String[] headlines = getResources().getStringArray(R.array.headline_array); 
     ArrayList results = new ArrayList<DataObject>(); 
     for (int index = 0; index < size; index++) { 
      DataObject obj = new DataObject(headlines[index], 
        "Secondary " + index); 
      obj.setUrl(images[index]); 
      //obj.setHeadline(headlines[index]); 
      results.add(index, obj); 
     } 
     return results; 
    } 
} 

我的適配器類

public class MyRecyclerViewAdapter extends RecyclerView 
     .Adapter<MyRecyclerViewAdapter 
     .DataObjectHolder> { 
    private static String LOG_TAG = "MyRecyclerViewAdapter"; 
    private ArrayList<DataObject> mDataset; 
    private static MyClickListener myClickListener; 
    private String headline; 
    private String reporterName; 
    private String date; 
    private String url; 
    private Activity activityContext; 

    public static class DataObjectHolder extends RecyclerView.ViewHolder 
      { 
     TextView label; 
     TextView dateTime; 
     ImageView imageView; 

     public DataObjectHolder(View itemView) { 
      super(itemView); 
      label = (TextView) itemView.findViewById(R.id.textView); 
      dateTime = (TextView) itemView.findViewById(R.id.textView2); 
      imageView=(ImageView)itemView.findViewById(R.id.imageView); 
      Log.i(LOG_TAG, "Adding Listener"); 
      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

       } 
      }); 
     } 

    } 



    public MyRecyclerViewAdapter(Activity context,ArrayList<DataObject> myDataset) { 
     mDataset = myDataset; 
     activityContext=context; 
    } 

    @Override 
    public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.cardview, parent, false); 

     DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
     return dataObjectHolder; 
    } 

    @Override 
    public void onBindViewHolder(DataObjectHolder holder, int position) { 
     Context context=null; 
     holder.label.setText(mDataset.get(position).getmText1()); 
     holder.dateTime.setText(mDataset.get(position).getmText2()); 
     Drawable placeholder = holder.imageView.getContext().getResources().getDrawable(R.drawable.placeholder); 
     holder.imageView.setImageDrawable(placeholder); 
     //new ImageDownloaderTask(holder.imageView).execute(mDataset.get(position).getUrl()); 
     Picasso.with(activityContext) 
       .load(mDataset.get(position).getUrl()) 
       .placeholder(R.drawable.placeholder) 
       .into(holder.imageView); 
    } 

    public void addItem(DataObject dataObj, int index) { 
     mDataset.add(index, dataObj); 
     notifyItemInserted(index); 
    } 

    public void deleteItem(int index) { 
     mDataset.remove(index); 
     notifyItemRemoved(index); 
    } 

    @Override 
    public int getItemCount() { 
     return mDataset.size(); 
    } 

    public interface MyClickListener { 
     public void onItemClick(int position, View v); 
    } 

} 

請幫助我做到這一點。 我想使用滾動監聽器與主要活動..

回答

0

我使用這個類來實現對RecyclerViews無盡的滾動行爲

public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener { 
public static String TAG = EndlessRecyclerOnScrollListener.class.getSimpleName(); 

private int previousTotal = 0; // The total number of items in the dataset after the last load 
private boolean loading = true; // True if we are still waiting for the last set of data to load. 
private int visibleThreshold = 5; // The minimum amount of items to have below your current scroll position before loading more. 
int firstVisibleItem, visibleItemCount, totalItemCount; 

private int current_page = 1; 

private LinearLayoutManager mLinearLayoutManager; 

public EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) { 
    this.mLinearLayoutManager = linearLayoutManager; 
} 

@Override 
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
    super.onScrolled(recyclerView, dx, dy); 

    visibleItemCount = recyclerView.getChildCount(); 
    totalItemCount = mLinearLayoutManager.getItemCount(); 
    firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); 

    if (loading) { 
     if (totalItemCount > previousTotal) { 
      loading = false; 
      previousTotal = totalItemCount; 
     } 
    } 
    if (!loading && (totalItemCount - visibleItemCount) 
      <= (firstVisibleItem + visibleThreshold)) { 
     // End has been reached 

     // Do something 
     current_page++; 

     onLoadMore(current_page); 

     loading = true; 
    } 
} 

public abstract void onLoadMore(int current_page); 

}

使用方法如下:

mRecyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(layoutManager) { 
     @Override 
     public void onLoadMore(int current_page) { 
      //call server 
      getRestaurantReviews(current_page); 
     } 
    }); 
+0

它的好處。但新的來通過在RecyclerView中取代舊的......我想添加數據到當前 –

+0

添加新項目給recyclerVie w列表並在recyclerView適配器 –

+0

上調用notifyDataSetChanged Ok.But對於GridLayout管理器它應該如何工作......? –