Android viewPager - нужно загружать изображения из JSON - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь создать ImageView, лучше сказать, слайдер Viewpager с 3 изображениями, который должен скользить слева направо.

Im my singleitemview.xml У меня есть это (Я положил туда ViewPager):

      <RelativeLayout
                android:id="@+id/container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <androidx.viewpager.widget.ViewPager
                    android:id="@+id/pager"
                    android:layout_width="fill_parent"
                    android:layout_height="100dp" />
</RelativeLayout>

 <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

                <TextView
                    android:id="@+id/sometext"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="@string/sometext"
                  />
</RelativeLayout>

затем singleitemview.java :

public class SingleitemView extends AppCompatActivity {

    CustomPagerAdapter mCustomPagerAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    setContentView(R.layout.singleitemview);
//... here I get some data from URL as json
//and then calling this:

createMarkersFromJson(json.toString());
}

private void createMarkersFromJson(String json) throws JSONException {

        JSONObject jsonObj = new JSONObject(json);
        JSONArray actors = jsonObj.getJSONArray("result");

        for (int i = 0; i < actors.length(); i++) {
            final JSONObject c = actors.getJSONObject(i);

            String typ = c.getString("typ");
            final String place2 = c.getString("place");

            final String img1 = c.getString("img1");
            final String img2 = c.getString("img2");
            final String img3 = c.getString("img3");

//Picasso.with(this).load(img1).memoryPolicy(MemoryPolicy.NO_CACHE).networkPolicy(NetworkPolicy.NO_CACHE).into(imgimg1);

            mCustomPagerAdapter = new CustomPagerAdapter(this);

            ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
            mViewPager.setAdapter(mCustomPagerAdapter);
}
}

my CustomPageAdapter.java :

class CustomPagerAdapter extends PagerAdapter {
int[] mResources = {
        R.drawable.bottom2,
        R.drawable.bottom,
        R.drawable.hrady

};
Context mContext;
LayoutInflater mLayoutInflater;

public CustomPagerAdapter(Context context) {
    mContext = context;
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

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

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

@Override
public Object instantiateItem(ViewGroup container, int position) {
    View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);

    ImageView imageView = (ImageView) itemView.findViewById(R.id.img1);
    imageView.setImageResource(mResources[position]);

    container.addView(itemView);

    return itemView;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((LinearLayout) object);
}

}

и, наконец, pager_item.xml :

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:src="@mipmap/ic_launcher"
        android:foregroundGravity="top|center"
        android:scaleType="fitCenter"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/img1" />

</LinearLayout>

Проблема заключается в том, что изображения определяются в CustomPagerAdapter внутри mResources, но яМне нужно использовать мои изображения из json, которые я знаю только в singleitemview.java, когда получаю данные из json.

Не могли бы вы помочь мне исправить мой код, чтобы он работал?

1 Ответ

1 голос
/ 23 сентября 2019

Передайте список изображений, полученных из JSON, в конструкторе Adapter

class CustomPagerAdapter extends PagerAdapter {   
List<String> mResources = new ArrayList<>();

Context mContext;
LayoutInflater mLayoutInflater;

public CustomPagerAdapter(Context context , List<String> mResources) {
    mContext = context;
    this.mResources=mResources;
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return mResources.size();
}

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

@Override
public Object instantiateItem(ViewGroup container, int position) {
    View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);

    ImageView imageView = (ImageView) itemView.findViewById(R.id.img1);
    Picasso.with(this).load(mResources.get(position)).memoryPolicy(MemoryPolicy.NO_CACHE).networkPolicy(NetworkPolicy.NO_CACHE).into(imageView);

    container.addView(itemView);

    return itemView;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((LinearLayout) object);
}

}

...