GirdView的學習

GirdView的一些屬性
columnWidth(每列的寬度)
numColunms=”auto_fit”(列數根據屏幕大小自適應)
verticalSpacing(垂直方向的間距)
horizontalSpacing(水平方向的間距)

Demo1:顯示文字

public class ExampleActivity1 extends AppCompatActivity{

    public GridView mGridView;
    @Override
    public void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example1);
        mGridView = (GridView)findViewById(R.id.grid_view);
        //準備數據
        List<String> data = new ArrayList<>();
        for (int i = 0; i < 9; i++) {
            data.add("aaaaa"+i);
        }
        //準備適配器   android.R.layout.simple_list_item_1 系統提供的簡單條目佈局
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);

        //設置Adapter
        mGridView.setAdapter(adapter);
    }
}



Xml
   <GridView
        android:id="@+id/grid_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="10dp"
        android:numColumns="3"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp"
        android:stretchMode="columnWidth"
        />

例子1


Demo2:顯示應用列表

這裏面幾個重要的方法:
//獲取系統應用信息
PackageManager packageManager = getPackageManager();
List installedPackages = packageManager.getInstalledPackages(0);
//獲取包的所有信息
PackageInfo packageInfo = installedPackages.get(i);
再挨個遍歷獲取信息
這是第二種獲取應用信息的方法,第一種在ListView學習裏有寫。

  if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)==0){//判斷不爲系統應用                //則添加到數據集合
            appInfoList.add(info);
        }
public class ExampleActivity2 extends AppCompatActivity {

    private GridView mGridVoid;
    private List<AppInfo> appInfoList;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example1);
        mGridVoid = (GridView)findViewById(R.id.grid_view);

        //準備數據
        getAppInfos();
        //準備適配器
        mGridVoid.setAdapter(new MyGridViewAdapter(ExampleActivity2.this,appInfoList));
    }

    //GridView數據源
    public List<AppInfo> getAppInfos() {
        appInfoList = new ArrayList<>();
        //獲取系統應用信息
        PackageManager packageManager = getPackageManager();
        List<PackageInfo> installedPackages = packageManager.getInstalledPackages(0);

        for (int i = 0; i <installedPackages.size(); i++) {
            AppInfo info = new AppInfo();
            //獲取包的所有信息
            PackageInfo packageInfo = installedPackages.get(i);
            //獲取包信息裏的應用名稱
            info.setAppName(packageInfo.applicationInfo.loadLabel(packageManager).toString());
            //獲取包圖片
            info.setAppIcon(packageInfo.applicationInfo.loadIcon(packageManager));
            //獲取包名
            info.setAppPackageName(packageInfo.packageName);
            //獲取版本號
            info.setAppVersionCode(packageInfo.versionCode);
            //獲取版本信息
            info.setAppVersionInfo(packageInfo.versionName);
            //添加到集合
//            appInfoList.add(info);
            if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)==0){//判斷不爲系統應用
                //則添加到數據集合
                appInfoList.add(info);
            }
        }
        return appInfoList;
    }
}
class MyGridViewAdapter extends BaseAdapter{
    private Context context;
    private List<AppInfo> appInfoList = new ArrayList<>();

    public MyGridViewAdapter(Context context, List<AppInfo> appInfoList) {
        this.context = context;
        this.appInfoList = appInfoList;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder  holder = new ViewHolder();
        if(convertView == null){
            convertView = View.inflate(context,R.layout.item_example2,null);
            holder.appIcon = (ImageView)convertView.findViewById(R.id.img_icon);
            holder.appName = (TextView)convertView.findViewById(R.id.tv_name);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        holder.appName.setText(appInfoList.get(position).getAppName()+"....."+appInfoList.get(position).getAppVersionInfo());
        holder.appIcon.setImageDrawable(appInfoList.get(position).getAppIcon());
        return convertView;
    }


    //準備ViewHolder
    class ViewHolder {
        private ImageView appIcon;
        private TextView appName;
    }

}

這裏寫圖片描述


demo3 網絡加載

public class ExampleActivity3 extends AppCompatActivity {

    private GridView gridView;
    private List<String> imgList;
    private List<ImageInfo>imageInfoList;
    private GridAdapter3 gridAdapter;
    private ImageLoadTask imageLoadTask;


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

    }

    private void initData() {
        imgList=new ArrayList<String>();
        imgList.add("http://img5.duitang.com/uploads/item/201406/26/20140626164837_dzKds.jpeg");
        imgList.add("http://img2.imgtn.bdimg.com/it/u=3980629563,3881837630&fm=21&gp=0.jpg");
        imgList.add("http://img5q.duitang.com/uploads/item/201505/08/20150508155052_XJaNW.jpeg");
        imgList.add("http://img4.duitang.com/uploads/item/201407/02/20140702105736_FdN5P.jpeg");
        imgList.add("http://img2.imgtn.bdimg.com/it/u=2866652161,3841912673&fm=21&gp=0.jpg");
        imgList.add("http://img4.imgtn.bdimg.com/it/u=883757693,2063816225&fm=21&gp=0.jpg");
        imgList.add("http://cdn.duitang.com/uploads/item/201309/26/20130926110955_QtUdX.jpeg");
        imgList.add("http://zjimg.5054399.com/allimg/160815/14_160815161625_9.jpg");
        imgList.add("http://i-7.vcimg.com/trim/09ce7067d2467c54cf05bbd271ee3ec8430415/trim.jpg");
        imageInfoList=new ArrayList<ImageInfo>();
        for(int i=0;i<9;i++)
        {
            ImageInfo imageInfo=new ImageInfo();
            imageInfo.setmUrl(imgList.get(i));
            imageInfo.setmText("圖片"+i);
            imageInfoList.add(imageInfo);
        }
        gridAdapter=new GridAdapter3(this,imageInfoList);
        gridView.setAdapter(gridAdapter);
        imageLoadTask =new ImageLoadTask(this,gridAdapter);
        imageLoadTask.execute();

    }

    private void initUi() {
        gridView= (GridView) findViewById(R.id.grid_view);
    }



    public Bitmap getImagefromNetWork(String path)
    {
        try {

            URL url=new URL(path);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setDoInput(true);
            urlConnection.setConnectTimeout(10*1000);
            urlConnection.connect();
            InputStream inputStream = urlConnection.getInputStream();
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            inputStream.close();
            return bitmap;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }


    public class ImageLoadTask extends AsyncTask<String,Void,Void>
    {

        private GridAdapter3 gridAdapter;
        public ImageLoadTask(Context context,GridAdapter3 gridAdapter)
        {
            this.gridAdapter=gridAdapter;
        }

        @Override
        protected Void doInBackground(String... params) {

            for(int i=0;i<gridAdapter.getCount();i++)
            {
                ImageInfo imageInfo= (ImageInfo) gridAdapter.getItem(i);
                String imagePath = imageInfo.getmUrl();
                Bitmap bitmap = getImagefromNetWork(imagePath);
                imageInfo.setmBitmap(bitmap);
                publishProgress();
            }


            return null;
        }



        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
            Log.e("Main","刷新");
            gridAdapter.notifyDataSetChanged();

        }
    }


}
public class GridAdapter3 extends BaseAdapter {
    private Context context;
    private List<ImageInfo> imageInfoList;

    public GridAdapter3(Context context, List<ImageInfo> imageInfoList) {
        this.imageInfoList = imageInfoList;
        this.context = context;
    }

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

    @Override
    public Object getItem(int position) {
        return imageInfoList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item_example2, null);
            holder = new ViewHolder();
            holder.imageView = (ImageView) convertView.findViewById(R.id.img_icon);
            holder.textView = (TextView) convertView.findViewById(R.id.tv_name);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        ImageInfo imageInfo = imageInfoList.get(position);
        holder.textView.setText(imageInfo.getmText());


//        Glide.with(context).load(imageInfo.getmUrl()).placeholder(R.mipmap.ic_launcher).centerCrop().into(holder.imageView);

        if(imageInfo.getmBitmap()==null)
        {
          holder.imageView.setImageResource(R.mipmap.ic_launcher);
        }
        else
        {
            holder.imageView.setImageBitmap(imageInfo.getmBitmap());
        }

        return convertView;
    }


    public class ViewHolder {
        ImageView imageView;
        TextView textView;
    }
}

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章