【发布时间】:2018-02-24 06:37:20
【问题描述】:
这是 Json 应该显示下一组图像的主要 java 代码
图像动态显示在图像滑块中。前 10 组将显示,在 10 幅图像结束时,应显示接下来的 10 幅图像。但是这不起作用。
这是我的Article.java
public class Article extends AppCompatActivity {
ViewPager viewPager;
static SimpleAdapter adapter;
static int startIndex;
ArrayList<ArrayList<String>> arrayList;
//int images[] = {R.drawable.image_1, R.drawable.image_2, R.drawable.image_3, R.drawable.image_4};
MyCustomPagerAdapter myCustomPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.article);
viewPager = (ViewPager) findViewById(R.id.viewPager);
arrayList=new ArrayList<>();
new Article.json(startIndex).execute();
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Toast.makeText(Article.this, ""+position+"--"+positionOffset+"--"+positionOffsetPixels, Toast.LENGTH_SHORT).show();
}
@Override
public void onPageSelected(int position) {}
@Override
public void onPageScrollStateChanged(int state) {}
});
}
@SuppressLint("StaticFieldLeak")
class json extends AsyncTask<Void,Void,ArrayList<ArrayList<String>>> {
ProgressDialog pDialog;
int startIndex;
public json(int startIndex) {
this.startIndex=startIndex;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Article.this);
pDialog.setTitle("Contacting Servers");
pDialog.setMessage("Logging in ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected ArrayList<ArrayList<String>> doInBackground(Void... voids) {
UserFunctions userFunction = new UserFunctions();
arrayList.addAll(userFunction.getArticle(startIndex));
try
{
Log.e("aaa",arrayList.toString());
} catch (Exception ex) {
}
return arrayList;
}
@Override
protected void onPostExecute(ArrayList<ArrayList<String>> arrayList) {
try {
//adapter.notifyDataSetChanged();
myCustomPagerAdapter = new MyCustomPagerAdapter(Article.this, arrayList);
viewPager.setAdapter(myCustomPagerAdapter);
} catch (Exception e) {Log.e("err",e+"error 1234567890");
} pDialog.dismiss();
}
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.END)) {
drawer.closeDrawer(GravityCompat.END);
}
}
}
我正在使用 MycustomPagerAdapter.java 的自定义适配器 java 类
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
public class MyCustomPagerAdapter extends PagerAdapter{
Context context;
ArrayList<ArrayList<String>> images;
LayoutInflater layoutInflater;
public MyCustomPagerAdapter(Context context, ArrayList<ArrayList<String>> images) {
this.context = context;
this.images = images;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return images.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((LinearLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
View itemView = layoutInflater.inflate(R.layout.item, container, false);
ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
TextView textView = (TextView) itemView.findViewById(R.id.textView2);
//imageView.setImageResource(images[position]);
Picasso.with(context).load("http://www.northmadras.com/upload/Articles/"+images.get(position).get(0)).into(imageView);
textView.setText(images.get(position).get(1));
Log.e("img","http://www.northmadras.com/upload/Articles/"+images.get(position).get(1));
container.addView(itemView);
//listening to image click
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(new Intent(context,ArticleContent.class));
}
});
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((LinearLayout) object);
}
}
【问题讨论】:
-
你说只显示前10个数据,后10个数据不显示?
-
是的,在 10 张图片的末尾没有加载
-
可以设置日志 :@Override public int getCount() { Log.i("tag","size::"+article.size()) return article.size(); } 消耗大小为 10 或 20。
-
我已经完成了您提到的更改。但它不起作用
-
您可能拥有相同的实现,并使用
RecyclerView进行更好的控制。请看下面我的答案。
标签: java android json android-recyclerview