Android 无休止的recyclerview安卓升级版2
我是android新手。我遇到了问题,我不知道如何在我的项目中添加无休止的recyclerview。下面是我的项目代码。现在,在我的recyclerview中,我可以使用改型2从服务器获取JSON 这是适配器Android 无休止的recyclerview安卓升级版2,android,android-recyclerview,retrofit2,Android,Android Recyclerview,Retrofit2,我是android新手。我遇到了问题,我不知道如何在我的项目中添加无休止的recyclerview。下面是我的项目代码。现在,在我的recyclerview中,我可以使用改型2从服务器获取JSON 这是适配器 public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { private ArrayList<Rec> recs; public DataAdapter(Ar
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);
}
});
}
}
公共类DataAdapter扩展了RecyclerView.Adapter{
私人阵列列表记录;
公共数据适配器(ArrayList recs){
this.recs=recs;
}
@凌驾
public DataAdapter.ViewHolder onCreateViewHolder(视图组视图组,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.card_行,viewGroup,false);
返回新的ViewHolder(视图);
}
@凌驾
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());
位图bmimage=null;
if(recs.get(i).getImage().toString()匹配(解码)){
字节[]imageByteArray=解码图像(recs.get(i).getImage().toString());
bmimage=BitmapFactory.decodeByteArray(imageByteArray,0,
imageByteArray.length);
viewHolder.image.setImageBitmap(bmimage);
}
否则{
Picasso.with(viewHolder.imageText.getContext()).load(recs.get(i.getImage()).fit().centerInside()加载到(viewHolder.image)中;
}
}
@凌驾
public int getItemCount(){
返回recs.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图tv_id、tv_标题、tv_链接、imageText、正文;
私有图像查看图像;
公共视图持有者(视图){
超级(视图);
tv_link=(TextView)view.findviewbyd(R.id.tv_link);
imageText=(TextView)view.findViewById(R.id.imageText);
image=(ImageView)view.findviewbyd(R.id.image);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent 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();
}
public类MainActivity扩展了AppCompatActivity{
私人回收站;
私有数组列表数据;
专用数据适配器;
私人按钮BTN历史记录、BTN填充器、BtnPromo;
私有静态最终长缓存_SIZE=10*1024*1024;
浮点x1,x2;
浮动y1,y2;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
BtnHistory.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Context=getApplicationContext();
CharSequence text=“请登录!!!”;
int duration=Toast.LENGTH\u LONG;
Toast Toast=Toast.makeText(上下文、文本、持续时间);
toast.show();
}
});
BtnBiller.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
BtnBiller.setBackgroundResource(R.drawable.btn\u find\u selected);
BtnPromo.挫折资源(R.可提取的btn_促销);
意图i=新意图(getApplicationContext(),
BillerCodeActivity.class);
i、 添加标志(意图、标志、活动、清除、顶部);
星触觉(i);
完成();
}
});
BtnPromo.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
BtnPromo.setBackgroundResource(R.drawable.btn\u promotion\u selected);
意图i=新意图(getApplicationContext(),
主要活动(课堂);
i、 添加标志(意图、标志、活动、清除、顶部);
星触觉(i);
完成();
}
});
}
私有void initViews(){
BtnHistory=(按钮)findViewById(R.id.btn_历史);
BtnBiller=(按钮)findViewById(R.id.btn\u biller);
BtnPromo=(按钮)findviewbyd(R.id.btn\u promo);
recyclerView=(recyclerView)findViewById(R.id.card\u recycler\u视图);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
获得晋升(0,3);
}
私人促销(内部a、内部b){
OkHttpClient客户端=新建OkHttpClient.Builder()
.connectTimeout(30,时间单位为秒)
.readTimeout(30,时间单位为秒)
.writeTimeout(30,时间单位。秒)
.cache(新缓存(getApplication().getCacheDir(),缓存大小))
.addNetworkInterceptor(重写\u缓存\u控制\u侦听器)
.build();
final ProgressDialog loading=ProgressDialog.show(这是“正在获取数据”,“请稍候…”,false,false);
/**Runnable progressRunnable=new Runnable(){
@凌驾
公开募捐{
加载。取消();
}
};
Handler pdCanceller=新处理程序();
pCanceller.postDelayed(progressRunnable,10000)*/
改装改装=新改装.Builder()
.baseUrl(“http://jpmockapi.azurewebsites.net/")
.addConverterFactory(GsonConverterFactory.create())
.客户(客户)
.build();
//Log.d(String.valueOf(client),String.val
public interface RequestInterface {
@GET("/cmsapi/promos/{startrowindex}/{maxcount}")
Call<JsonResponse>getPromotions(@Path("startrowindex") int a,
@Path("maxcount") int b);