image-loader显示葫芦娃

  1. Activity中的代码
public class MainActivity extends FragmentActivity {

    private ViewPager pager;
    private RadioGroup radioGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById( R.id.radioButton).setBackgroundColor(Color.RED);
        findViewById( R.id.radioButton2).setBackgroundColor(Color.GREEN);
        pager = findViewById(R.id.pager);
        radioGroup = findViewById(R.id.radiogroup);
        //默认选中第一个
        radioGroup.check(radioGroup.getChildAt(0).getId());
        //设置页面滑动数据

        ArrayList<Fragment> list=new ArrayList<Fragment>();
        FragListview fragListview=new FragListview();
        FragGridView fragGridView=new FragGridView();
        list.add(fragListview);
        list.add(fragGridView);
        ///设置适配器
        pager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(),list));
        //按钮跟着页面走
        pager. addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                //当页面发生改变 按钮也要跟着变
                radioGroup.check(radioGroup.getChildAt(i).getId());
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
        //页面跟着按钮改变
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                //根据点击按钮改变页面
                switch (checkedId){
                    case  R.id.radioButton:
                        findViewById( R.id.radioButton).setBackgroundColor(Color.RED);
                        findViewById( R.id.radioButton2).setBackgroundColor(Color.GREEN);
                        pager.setCurrentItem(0);
                        break;
                    case  R.id.radioButton2:
                        findViewById( R.id.radioButton).setBackgroundColor(Color.GREEN);
                        findViewById( R.id.radioButton2).setBackgroundColor(Color.RED);
                        pager.setCurrentItem(1);
                        break;
                }
            }
        });

    }
}
  1. 这是ActivityXml布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

        </android.support.v4.view.ViewPager>

        <RadioGroup
            android:id="@+id/radiogroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <RadioButton
                android:id="@+id/radioButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:button="@null"
                android:gravity="center"
                android:padding="8dp"
                android:text="list列表" />

            <RadioButton


                android:id="@+id/radioButton2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:button="@null"
                android:gravity="center"
                android:padding="8dp"
                android:text="grid列表" />


        </RadioGroup>


    </LinearLayout>

</RelativeLayout>
  1. Fragment适配器代码如下
public class MyFragmentAdapter extends FragmentPagerAdapter {
    private ArrayList<Fragment> list;

    public MyFragmentAdapter(FragmentManager fm, ArrayList<Fragment> list) {
        super(fm);
        this.list = list;
    }

    @Override
    public Fragment getItem(int i) {
        return list.get(i);
    }

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

  1. FragListView代码
public class FragListview extends Fragment {

    private ListView listView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fraglistview, container, false);
        listView = view.findViewById(R.id.listview);
        //解析网络数据
        new Thread() {
            @Override
            public void run() {
                super.run();
                //请求数据
                String s = HttpUtile.requestHttpGet("https://api.apiopen.top/musicRankings");
                //解析
                Gson gson = new Gson();
                JsonListBean listBean = gson.fromJson(s, JsonListBean.class);
                List<JsonListBean.ResultBean> list = listBean.getResult();
                //子线程处理数据完毕
                //更新ui
                Message message = new Message();
                message.what = 0;
                message.obj = list;
                handler.sendMessage(message);
            }
        }.start();


        return view;
    }

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    List<JsonListBean.ResultBean> list = (List<JsonListBean.ResultBean>) msg.obj;
                    //展示到listview上
                    listView.setAdapter(new MyAdapter(list,getActivity()));
                    break;

            }
        }
    };

5.FragGridView代码如下

public class FragGridView extends Fragment implements MyAsyncTask.Callbacks {

    private GridView grid;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view=inflater.inflate(R.layout.fraggradview,container,false);
        grid = view.findViewById(R.id.grid);
        //请求数据
        MyAsyncTask task=new MyAsyncTask();
        task.setCallbacks(this);
        task.execute("https://api.apiopen.top/musicRankings");
        return view;
    }

    @Override
    public String getData(String string) {
        //解析
        Gson gson = new Gson();
        JsonListBean listBean = gson.fromJson(string, JsonListBean.class);
        List<JsonListBean.ResultBean> list = listBean.getResult();
        grid.setAdapter(new MyAdapter(list,getActivity()));
        Toast.makeText(getActivity(),string,Toast.LENGTH_LONG).show();
        return null;
    }
}

6.HttpUtile网络请求

public static String requestHttpGet(String strUrl) {

        try { //设置url
            URL url = new URL(strUrl);

            //获取HttpURLConnection
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //设置为get请求
            connection.setRequestMethod("GET");
            //设置连接主机超时时间
            connection.setConnectTimeout(5000);
            //设置从主机读取数据超时
            connection.setReadTimeout(5000);
            //获取请求码(来判断网络请求是否正确)
            int code = connection.getResponseCode();

            //判断请求是否成功
            if (code == HttpURLConnection.HTTP_OK) {
                //如果数据请求成功
                //就获取数据
                InputStream stream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "utf-8"));
                //拼接字符串
                StringBuilder builder = new StringBuilder();
                //把数据读取从成字符串
                String str = "";
                while ((str = reader.readLine()) != null) {
                    //把一行行数据拼接成一行数据
                    builder.append(str);
                }
                //返回拼接后的数据
                return builder.toString();

            }
            //关闭连接
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Bitmap httpGETImage(String string) {
        try {
            //设置URL
            URL url = new URL(string);
            //得到HttpURLConnection
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            //连接超时时间
            connection.setConnectTimeout(5000);
            //读取超时
            connection.setReadTimeout(5000);
            //获取请求码 一般情况下200是成功
            int code = connection.getResponseCode();
            //判断请求码是否 请求成功
            if (code == HttpURLConnection.HTTP_OK) {
                //得到数据
                InputStream stream = connection.getInputStream();
                // 如果是图片
                Bitmap bitmap = BitmapFactory.decodeStream(stream);

                return bitmap;
            }
            connection.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    //post请求
    public static String httpPost(String str1, String str2) {
//        http://apis.juhe.cn/cook/query   ?    key=&menu=蛋炒饭
        try {
            //设置url
            URL url = new URL(str1);
            //获取HttpURLConnection
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //设置为post请求
            connection.setRequestMethod("POST");
            //使用写入和读取(post请求必须要写这个俩)
            connection.setDoOutput(true);
            connection.setDoInput(true);
            //
            PrintWriter writer = new PrintWriter(connection.getOutputStream());
            writer.write(str2);// key=  &menu=蛋炒饭
            writer.flush();
            ;//刷新
            //判断是否成功
            int code = connection.getResponseCode();
            if (code == 200) {
                //读取数据
                InputStream stream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "utf-8"));
                //拼接字符串
                StringBuilder builder = new StringBuilder();
                String s = "";
                //读取数据
                while ((s = reader.readLine()) != null) {
                    //拼接字符串
                    builder.append(s);
                }

                return builder.toString();
            }
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

7.MyAsyncTask代码如下

public class MyAsyncTask extends AsyncTask<String ,Void,String> {
    @Override
    protected String doInBackground(String... strings) {
        return HttpUtile.requestHttpGet(strings[0]);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        callbacks.getData(s);

    }
    public  interface  Callbacks{
          String getData(String string);
    }
    private  Callbacks callbacks;

    public void setCallbacks(Callbacks callbacks) {
        this.callbacks = callbacks;
    }
}

8.listViewAdapter

public class MyListAdapter extends BaseAdapter {
    private List<JsonListBean.ResultBean> list;
    private Context context;

    public MyListAdapter(List<JsonListBean.ResultBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
       if (convertView==null){
           convertView = LayoutInflater.from(context).inflate(R.layout.item_list, null);
            holder = new ViewHolder();
           holder.image = convertView.findViewById(R.id.ima);
           holder.text = convertView.findViewById(R.id.name);
           convertView.setTag(holder);
       }else{
           holder = (ViewHolder) convertView.getTag();
       }
        JsonListBean.ResultBean resultBean = list.get(position);
       holder.text.setText(resultBean.getName());
        ImageLoader.getInstance().displayImage(resultBean.getBg_pic(),holder.image);
        return convertView;
    }
    class  ViewHolder{
        TextView text;
        ImageView image;
    }
}```

猜你喜欢

转载自blog.csdn.net/qq_40432465/article/details/85560632