Мой Viewpager не может отобразить мое второе изображение в базе данных

#java #android

#java #Android

Вопрос:

В моем проекте я использую Viewpager для отображения моих фотографий из базы данных.В моей базе данных у меня есть две страницы, на каждой странице по одной фотографии. Я могу получить первое изображение на своей первой странице, но view pager не показывает мое второе изображение со следующей страницы. Я знаю причину, и причина в том, что мое состояние не переходит на вторую страницу. Я не знаю, где я перехожу на вторую страницу.

вот мой код:

     public class main_matn2 extends Activity {

    private database db;
    private String sea;
    private String name;
    private int Page1;
    public int Page2 = 1;
    private SharedPreferences sp;
    TextView Lesson_Name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main_matn2);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.matn_title);
        Lesson_Name = (TextView) findViewById(R.id.lesson_name);

        db = new database(this);


        Bundle ex = getIntent().getExtras();

        sea = ex.getString("sea");
        name = ex.getString("name");
        Page1 = Integer.parseInt(ex.getString("page"));
        Lesson_Name.setText(name);

        Typeface type = Typeface.createFromAsset(getAssets(), "font/font_bold.ttf");
        Lesson_Name.setTypeface(type);


        load(sea, name, Page2);


    }
    private void load(String sea, String Name, int page3) {

        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImagePagerAdapter adapter = new ImagePagerAdapter(page3, Name);
        viewPager.setAdapter(adapter);
        db.open();



    }


    @Override
    public void onBackPressed() {

        sp = getApplicationContext().getSharedPreferences("user", 0);
        Editor ed = sp.edit();
        ed.putString("name", name);
        ed.putString("sea", sea);
        ed.putInt("page", Page1);
        ed.commit();

        finish();


    }

    @Override
    protected void onPause() {

        sp = getApplicationContext().getSharedPreferences("user", 0);
        Editor ed = sp.edit();
        ed.putString("name", name);
        ed.putString("sea", sea);
        ed.putInt("page", Page1);
        ed.commit();


        super.onPause();

    }


    public class ImagePagerAdapter extends PagerAdapter {

        int img_count;
        String Name;

        public ImagePagerAdapter(int count, String Name) {
            img_count = count;
            this.Name = Name;
        }

        @Override

        public int getCount() {

            return img_count;

        }

        @Override

        public boolean isViewFromObject(View view, Object object) {

            return view == ((ImageView) object);

        }

        @Override

        public Object instantiateItem(ViewGroup container, int position) {

            Context context = main_matn2.this;


            ImageView imageView = new ImageView(context);

            int padding = context.getResources().getDimensionPixelSize(

                    R.dimen.padding_medium);

            imageView.setPadding(padding, padding, padding, padding);

            imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);


            String p = db.getpic("content", sea, Name, img_count   "");
            if (p != null) {

                int ImageResource = getResources().getIdentifier(p, "drawable", getPackageName());
                imageView.setImageResource(ImageResource);

            }



            ((ViewPager) container).addView(imageView, 0);
            return imageView;

        }

        @Override

        public void destroyItem(ViewGroup container, int position, Object object) {

            ((ViewPager) container).removeView((ImageView) object);

        }

    }


}
  

мой метод загрузки перед добавлением view pager был таким:

     private void load(String sea, String Name, int page3) {

    db.open();

    String p = db.getpic("content", sea, Name, page3   "");

    if (p != null) {

        int ImageResource = getResources().getIdentifier(p, "drawable", getPackageName());
        img.setImageResource(ImageResource);

    } else {
        img.setVisibility(View.GONE);
    }
    db.close();


}
  

и у меня была одна кнопка для изменения моих страниц.(Я мог бы перейти на вторую страницу с помощью этой кнопки.

вот моя кнопка (но теперь мне нужен viewpager, и мне больше не нужна эта кнопка)

     next.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            if (Page1 == Page2) {

                Toast.makeText(getApplicationContext(), "last page", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(main_matn1.this, CustomTabActivity.class);
                startActivity(intent);
            } else {

                Page2  ;
                load(sea, name, Page2);
            }


        }
    });

any help?
I am new with android and now I'm very confused.
  

Ответ №1:

Можете ли вы изменить метод onCreate в этой строке

загрузить (sea, name, Page2); с этой загрузкой (sea, name, 2);

и в методе adapter instantiateItem() измените строку кода p = db.getpic(«content», sea, Name, img_count «»); с помощью этой строки кода p = db.getpic(«content», sea, Name, position «»);

Комментарии:

1. Нет, я не могу изменить свой метод загрузки, как этот load (sea, name, 2); потому что он должен загрузить первую страницу, затем следующую страницу.

2. но когда вы создаете свой ImagePagerAdapter, вы отправляете «1» для своего счетчика адаптера в методе oncreate private void load(String sea, String Name, int page3) {ViewPager ViewPager = (ViewPager) findViewById(R.id.view_pager); Адаптер ImagePagerAdapter = новый ImagePagerAdapter(страница 3, имя); ViewPager.setAdapter(адаптер); db.open(); }