android - ViewPager 片段内容第一次为空白,但第一次后工作正常
问题描述
在我的应用程序中,我使用回收器视图来显示图像,单击每个图像应该打开一个视图寻呼机并显示当前图像,但问题是当我第一次单击任何图像时它显示空白片段,之后我单击返回键它再次显示回收器视图,现在我的应用程序工作正常,单击任何图像完美显示包含图像的片段。提前致谢。这是我的回收站视图代码
@Override
public void onBindViewHolder(ViewHolder holder, final int position){
CardView cv = holder.cardView;
// Skiped un neccessery code from here
cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent;
if (is_image_file){
intent = new Intent(context, ImageOpener.class);
}
else {
intent = new Intent(context, VideoPlayer.class);
}
intent.putExtra("POSITION", position );
context.startActivity(intent);
}
});
}
这是我的 ImageOpener.java 类的代码
public class ImageOpener extends AppCompatActivity {
Utils utils = new Utils();
private ArrayList<String> images_paths;
private int size_of_pager, position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opener);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
images_paths = utils.load_images();
position = getIntent().getExtras().getInt("POSITION");
size_of_pager = images_paths.size();
SectionsPagerAdapter pagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setOffscreenPageLimit(size_of_pager);
pager.setAdapter(pagerAdapter);
pager.setCurrentItem(position);
}
private class SectionsPagerAdapter extends FragmentPagerAdapter{
public SectionsPagerAdapter(FragmentManager fm){
super(fm);
}
@Override
public int getCount(){
return size_of_pager;
}
@Override
public Fragment getItem(int pos){
return new OpenImageSlideFragment(pos);
}
}
}
这是我的 OpenImageSlideFragment.java 类的代码
public class OpenImageSlideFragment extends Fragment {
Utils utils = new Utils();
ImageButton save_button, share_button;
private ArrayList<String> images_path;
private int position;
String current_file;
public OpenImageSlideFragment(int position) {
this.position = position;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_open_image_slide, container, false);
TouchImageView preview = (TouchImageView) rootView.findViewById(R.id.preview_image);
images_path = utils.load_images();
current_file = images_path.get(position);
File imgFile = new File(current_file);
Uri uri = Uri.fromFile(imgFile.getAbsoluteFile());
Picasso.get().load(uri).into(preview);
return rootView;
}
}
Utils.load_image() 的代码
public ArrayList<String> load_images(){
System.out.println("in load image function");
File path = new File(Environment.getExternalStoragePublicDirectory(""), "some/path/");
File[] all_images = path.listFiles();
ArrayList<String > imagePaths = new ArrayList<>();
// for (int j=0; j<=2; j++) //for just testing purpose
for (int i = 0; i < all_images.length; i++) {
System.out.println(all_images[i].getAbsolutePath());
if (all_images[i].getAbsolutePath().endsWith(".jpg")) {
imagePaths.add(all_images[i].getAbsolutePath());
}
}
return imagePaths;
}
解决方案
如果您在要显示多张图像的地方使用 viewpager,请查看此链接,它将对您有所帮助
https://youtu.be/DBOIQP3lI_w
推荐阅读
- laravel - Laravel 有很多深层问题
- c++ - 如何从第一台服务器运行第二台服务器?
- python - 用于打开 Jupyter Notebook 并指向特定文件夹的 Python 代码
- flask - Apache Airflow GUI 中的禁用/隐藏/删除文档菜单
- flutter - 如何在颤动的另一个飞镖文件上调用飞镖文件中的多个小部件?
- python - 安装后无法运行 jupyter-book 命令
- c# - 使用 dinktopdf 将现有 pdf 附加到新 pdf
- floating-point - RISC-V 浮点舍入结果 Spike Vs。RTL 模拟
- foreach - Makefile $(eval $(call)) 函数
- ios - Firebase 分析事件何时触发?