无尽的recyclerview android与改造2

时间:2017-01-10 01:56:06

标签: android android-recyclerview retrofit2

我是android新手。我有问题,我不知道如何在我的项目中添加无尽的recyclerview。以下是我的项目代码。现在在我的recyclerview中,我可以使用Retrofit 2从服务器获取JSON。

这是适配器。

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {


private ArrayList<Rec> recs;

public DataAdapter(ArrayList<Rec> recs) {
    this.recs = recs;
}


@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final DataAdapter.ViewHolder viewHolder,final int i) {
    String decode ="^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";

    viewHolder.tv_link.setText(recs.get(i).getLink());
    viewHolder.imageText.setText(recs.get(i).getImage());

    Bitmap bmimage = null;
    if(recs.get(i).getImage().toString().matches(decode)) {
        byte[] imageByteArray = decodeImage(recs.get(i).getImage().toString());
        bmimage = BitmapFactory.decodeByteArray(imageByteArray, 0,
                imageByteArray.length);
        viewHolder.image.setImageBitmap(bmimage);
    }
        else {
        Picasso.with(viewHolder.imageText.getContext()).load(recs.get(i).getImage()).fit().centerInside() .into(viewHolder.image);
    }
}

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

public class ViewHolder extends RecyclerView.ViewHolder{

    private TextView tv_id,tv_title,tv_link,imageText,body;
    private ImageView image;
    public ViewHolder(View view) {
        super(view);




        tv_link = (TextView)view.findViewById(R.id.tv_link);
        imageText = (TextView)view.findViewById(R.id.imageText);
        image = (ImageView)view.findViewById(R.id.image);


        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(view.getContext(), PromotionDetails.class);

                intent.putExtra("link", tv_link.getText().toString());

                view.getContext().startActivity(intent);



            }
        });
    }



}

}

以下是我的活动类,

    public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private ArrayList<Rec> data;
    private DataAdapter adapter;
    private Button BtnHistory,BtnBiller,BtnPromo;
    private static final long CACHE_SIZE = 10 * 1024 * 1024;
    float x1,x2;
    float y1, y2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initViews();


        BtnHistory.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Context context = getApplicationContext();
                CharSequence text = "Please Login!!!";
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(context, text, duration);
                toast.show();

            }
        });

        BtnBiller.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                BtnBiller.setBackgroundResource(R.drawable.btn_find_selected);
                BtnPromo.setBackgroundResource(R.drawable.btn_promotion);
                Intent i = new Intent(getApplicationContext(),
                        BillerCodeActivity.class);
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
                finish();
            }
        });

        BtnPromo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                BtnPromo.setBackgroundResource(R.drawable.btn_promotion_selected);
                Intent i = new Intent(getApplicationContext(),
                        MainActivity.class);
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
                finish();
            }
        });
    }



    private void initViews(){
            BtnHistory =(Button) findViewById(R.id.btn_history);
            BtnBiller =(Button) findViewById(R.id.btn_biller);
            BtnPromo =(Button) findViewById(R.id.btn_promo);
            recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view);
            recyclerView.setHasFixedSize(true);
            RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
            recyclerView.setLayoutManager(layoutManager);

            getPromotions(0,3);
    }

    private void getPromotions(int a,int b){

            OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .cache(new Cache(getApplication().getCacheDir(), CACHE_SIZE))
                .addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
                .build();

            final ProgressDialog loading = ProgressDialog.show(this,"Fetching Data","Please wait...",false,false);

           /** Runnable progressRunnable = new Runnable() {

            @Override
            public void run() {
                loading.cancel();
            }
            };

            Handler pdCanceller = new Handler();
            pdCanceller.postDelayed(progressRunnable, 10000);*/

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://jpmockapi.azurewebsites.net/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(client)
                    .build();
            //Log.d(String.valueOf(client),String.valueOf(client));
            RequestInterface request = retrofit.create(RequestInterface.class);
            Call<JsonResponse> call = request.getPromotions(a,b);
            call.enqueue(new Callback<JsonResponse>() {
                    @Override
                    public void onResponse(Call<JsonResponse> call, Response<JsonResponse> response) {
                        if(response.isSuccess()) {
                            loading.dismiss();
                            JsonResponse jsonResponse = response.body();
                            data = new ArrayList<>(Arrays.asList(jsonResponse.getPromotion()));
                            adapter = new DataAdapter(data);
                            recyclerView.setAdapter(adapter);
                            //DBCreate();
                            //SubmitDataToSQLiteDB();

                        }
                        else{
                            loading.dismiss();
                            Context context = getApplicationContext();
                            CharSequence text = "Having Problem On Fetching Data!!! Try Again...";
                            int duration = Toast.LENGTH_LONG;

                            Toast toast = Toast.makeText(context, text, duration);
                            toast.show();

                        }

                    }

                    @Override
                    public void onFailure(Call<JsonResponse> call, Throwable t) {
                        loading.dismiss();
                        Log.d("Error",t.getMessage());
                        /**Context context = getApplicationContext();
                        CharSequence text = "No Network Connection!!! Try Again...";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();*/

                    }


            });

    }

    @Override
    public void onStop(){
        super.onStop();
    }

    @Override
    public void onBackPressed() {

        Intent i = new Intent(getApplicationContext(),
                Start.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
        finish();

    }

}

这是我的改装GET

public interface RequestInterface {

@GET("/cmsapi/promos/{startrowindex}/{maxcount}")

Call<JsonResponse>getPromotions(@Path("startrowindex") int a,
                                @Path("maxcount") int b);

}

我想要做的就是在滚动循环回放视图时获取JSON,例如facebook feed.Hope有人会帮助我。谢谢。     `

1 个答案:

答案 0 :(得分:0)

你可以试试这个。

  

Learn2Crack   link

希望它能解决你的问题。