Android java - создание 1 адаптера изображения для 2 или более вьюеров (в настоящее время 2 адаптера для 2 пейджеров) - PullRequest
1 голос
/ 03 февраля 2020

Я создал класс ImageAdapter, который содержит изображения и действие, которое содержит 2 кнопки, при нажатии каждая из которых открывает новое действие с помощью окна просмотра. 2 виджера имеют разные изображения, и вот тут и появляется моя неопытность.

Я выбрал простой способ, продублировал ImageAdapter (назвал его ImageAdapter2) и связал его со 2-м видоискателем. визуальное представление

Работает нормально, но я пытаюсь очистить его и выполнить все через 1 адаптер и 1 видоискатель. Я пытался сделать это через Intent getStringExtra, но он не распознал метод Intent. Вот мои классы:

ImageAdapter ( ImageAdapter2 - то же самое, только с различными изображениями в 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;
        }

    }

Работа с кнопками:

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;
    }
}

Активность с ViewPager (другая активность с ViewPager имеет тот же код, просто вызывает 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 : у меня есть 2 ImageAdapter и 2 Viewpager, но я хочу сделать через 1 ImageAdapter и 1 ViewPager (2 кнопки в предыдущем действии определяют, какой набор изображений будет отображаться в ViewPager)

1 Ответ

0 голосов
/ 05 февраля 2020

Решено с использованием ViewPager2 вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...