简体   繁体   中英

Android java - making 1 ImageAdapter for 2 or more viewpagers (currently 2 adapters for 2 viewpagers)

I made an ImageAdapter class that contains images and an activity that contains 2 buttons, on click each one opens a new activity with a viewpager. The 2 viewpagers have different images and this is where my inexperience comes in.

I took the easy way and duplicated the ImageAdapter (named it ImageAdapter2) and linked it to the 2nd viewpager. visual representation

It works fine, but what I'm trying to do is clean it up and do it all through 1 adapter and 1 viewpager. I tried to do it through Intent getStringExtra but it didn't recognize Intent method. Here are my classes:

ImageAdapter ( ImageAdapter2 is the same, just has different images in sliderImageId ):

    package hr.cnzd.prepoznajmoenasilje;

    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.LinearLayout;

    import androidx.viewpager.widget.PagerAdapter;
    import androidx.viewpager.widget.ViewPager;


    public class ImageAdapter extends PagerAdapter {

        Context mContext;

        ImageAdapter(Context context){
            this.mContext = context;
        }

        @Override
        public boolean isViewFromObject(View view, Object o){
            return view == ((ImageView) o);
        }

        private int[] sliderImageId = new int[]{
                R.drawable.djeca01, R.drawable.djeca02, R.drawable.djeca03, R.drawable.djeca04, R.drawable.djeca05, R.drawable.djeca06, R.drawable.djeca07, R.drawable.djeca08
        };

        @Override
        public Object instantiateItem(ViewGroup viewGroup, int position){
            ImageView imageView = new ImageView(mContext);
            imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setImageResource(sliderImageId[position]);
            ((ViewPager) viewGroup).addView(imageView, 0);
            return imageView;
        }


        @Override
        public void destroyItem(ViewGroup viewGroup, int position, Object o){
            ((ViewPager) viewGroup).removeView((ImageView) o);
        }

        @Override
        public int getCount(){
            return  sliderImageId.length;
        }

    }

Activity with buttons:

package hr.cnzd.prepoznajmoenasilje;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import androidx.appcompat.app.AppCompatActivity;
public class MA_Savjeti extends AppCompatActivity {
    private ImageButton imageButtonDjeca;
    private ImageButton imageButtonOdrasli;

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

        imageButtonDjeca = findViewById(R.id.imgBtnDjeca);
        imageButtonDjeca.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openActivitySavjetiDjeca();
            }
        });

        imageButtonOdrasli = findViewById(R.id.imgBtnOdrasli);
        imageButtonOdrasli.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openActivitySavjetiOdrasli();
            }
        });
    }

    public void openActivitySavjetiDjeca() {
        Intent intent = new Intent(this, Savjeti_Djeca.class);
        intent.putExtra("savjeti", "djeca");
        startActivity(intent);
    }

    public void openActivitySavjetiOdrasli() {
        Intent intent = new Intent(this, Savjeti_Odrasli.class);
        intent.putExtra("savjeti", "odrasli");
        startActivity(intent);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public boolean onCreateOptionsMenu(Menu menu) {
        return true;
    }
}

Activity with viewpager (other activity with viewpager has the same code, just calls ImageAdapter2)

package hr.cnzd.prepoznajmoenasilje;

import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

public class Savjeti_Djeca extends AppCompatActivity {

    ViewPager viewPager;
    ImageAdapter imageAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.savjeti_djeca);
        viewPager = findViewById(R.id.viewpager);
        imageAdapter = new ImageAdapter(this);
        viewPager.setAdapter(imageAdapter);
    }

}

TLDR : I have 2 ImageAdapters and 2 Viewpagers, but I wanna do it through 1 ImageAdapter and 1 Viewpager (2 buttons on a previous activity decide which set of images is shown on the viewpager)

使用 ViewPager2 而不是这种方式解决了它。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM