簡體   English   中英

在View Pager中傳遞Json圖像

[英]Passing Json images in the View Pager

我正在嘗試在視圖分頁器中傳遞Json數據,它沒有顯示任何錯誤。 但是它也沒有在視圖尋呼機中顯示圖像,無法理解我的錯誤

JSON: http//www.souqalkhaleejia.com/webapis/banners.php

Banner.java

public class Banner extends Fragment {
    ViewPager bannerpager;
    ArrayList<Data> bannerdta = new ArrayList<Data>();
    BannerAdapter bannerAdapter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View bannerp = inflater.inflate(R.layout.banner, container, false);
        bannerpager = (ViewPager) bannerp.findViewById(R.id.bannerpager);
        bannerpager.setAdapter(bannerAdapter);
        bannerAdapter = new BannerAdapter(bannerdta, getActivity());
        loadbanner();
        return bannerp;
    }

    private void loadbanner() {
        String bannerurl = "http://www.souqalkhaleejia.com/webapis/banners.php";
        JsonObjectRequest bannerreq = new JsonObjectRequest(Request.Method.GET, bannerurl, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray banners = response.getJSONArray("banners");
                    for (int i = 0; i < banners.length(); i++) {
                        JSONObject banner1 = banners.getJSONObject(i);
                        Data banndata = new Data();
                        banndata.setBannerimages(banner1.getString("image"));
                        bannerdta.add(banndata);
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
                bannerAdapter.notifyDataSetChanged();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getActivity(), "" + error, Toast.LENGTH_SHORT).show();
            }
        });
        AppController.getInstance().addToRequestQueue(bannerreq);
    }
}

Adapter.java

public class BannerAdapter extends PagerAdapter {
    Context cntx;
    private ArrayList<Data> blist;
    private LayoutInflater binflater;

    public BannerAdapter(ArrayList<Data> blist, Context cntx) {
        this.blist = blist;
        this.cntx = cntx;
        binflater= (LayoutInflater) cntx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override

    public int getCount() {
        return blist.size();
    }

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

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view=binflater.inflate(R.layout.banner_layout,container,false);
        NetworkImageView bannerimage= (NetworkImageView) view.findViewById(R.id.bannerimage);
        Data bannerdata=blist.get(position);
        ImageLoader imageLoader=AppController.getInstance().getImageLoader();
        bannerimage.setImageUrl(bannerdata.getBannerimages(),imageLoader);
        view.setTag(bannerdata);
        container.addView(view);
        Log.i("Banner", "instantiateItem() [position: " + position + "]" + " childCount:" + container.getChildCount());
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
        Log.i("Banner", "destroyItem() [position: " + position + "]" + " childCount:" + container.getChildCount());
    }

    @Override
    public int getItemPosition(Object object) {
        Data data= (Data) ((View) object).getTag();
        int position=blist.indexOf(data);
        if(position>=0){
            return position;
        }else {
            return POSITION_NONE;
        }
    }
}

我包括從另一個類的viewpager到主頁Home.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <include
            android:id="@+id/hmebar"
            layout="@layout/toolbar" />
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="200dp"
            >
            <include layout="@layout/banner"/>
        </FrameLayout>

    </LinearLayout>

    <ListView
        android:id="@+id/nav_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@drawable/hover"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>

banner.xml(我在這里寫了viewpager xml並包含在Home布局中)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.v4.view.ViewPager
        android:id="@+id/bannerpager"
        android:layout_width="match_parent"
        android:layout_height="200dp"/>

</LinearLayout>

banner_layout.xml(單個viewpager是圖像)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<com.android.volley.toolbox.NetworkImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bannerimage"/>
</LinearLayout>

您沒有將bannerdta更新為bannerAdapter ,因此bannerAdapter.notifyDataSetChanged()將不起作用。
您可以在BannerAdapter.class添加方法updateData(Data banndata)
pubilc void updateData(Data banndata) { blist.add(banndata); notifyDataSetChanged(); }
在呼叫網絡請求成功后,使用bannerAdapter.updateData(banndata)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM