有一个GridView显示来自URL路径的图像片段 [英] Fragment having a GridView to show images from url path

查看:188
本文介绍了有一个GridView显示来自URL路径的图像片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做一个GridView,显示图像等它显示在GridView,但没有图像,如果点击它框在GridView弹出的链接。我有不知道为什么我的图片是在GridView的失踪......

我的继承人片段类

 公共类FragmentD扩展片段{
    公共FragmentD(){}
    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                         捆绑savedInstanceState){    查看rootView = inflater.inflate(R.layout.fragment_d,集装箱,FALSE);    尝试{
        的EditText main_searchField =(EditText上)rootView.findViewById(R.id.editText_search_d);
        。字符串main_search = main_searchField.getText()的toString();        微调main_categoryField =(微调)rootView.findViewById(R.id.spinner_d);
        串类= main_categoryField.getSelectedItem()的toString()。        GridView控件main_gridviewField =(GridView控件)rootView.findViewById(R.id.gridView_main);
        main_gridviewField.setAdapter(新MyGridViewAdapter(getActivity()));
        main_gridviewField.setOnItemClickListener(新AdapterView.OnItemClickListener(){            公共无效onItemClick(适配器视图<>为arg0,观景,INT位置,长ARG3){
                Toast.makeText(getActivity(),MyGridViewConfig.getResim_list()。
                        得到(位置),Toast.LENGTH_SHORT).show();            }
        });        如果(main_gridviewField.isActivated()){
            。ImageView的sad_face =(ImageView的)getActivity()findViewById(R.id.imageView_main_sadface);
            sad_face.setVisibility(View.INVISIBLE);
            。TextView的nosuchdata =(TextView中)getActivity()findViewById(R.id.textView_main_nodatafound);
            nosuchdata.setVisibility(View.INVISIBLE);
        }
    }赶上(例外五){
        Toast.makeText(getActivity(),EPIC FAIL,Toast.LENGTH_LONG).show();
    }    //新search_mainActivity(getActivity())执行(main_search,类别)。    返回rootView;
}}

我的继承人适配器

 公共类MyGridViewAdapter扩展BaseAdapter实现ListAdapter {私人上下文的背景下;公共MyGridViewAdapter(上下文的背景下){
    超();
    this.context =背景;    MyGridViewConfig.addImageUrls();
}
公众诠释的getCount(){
    返回MyGridViewConfig.getResim_list()的大小()。}公共对象的getItem(INT位置){    返回MyGridViewConfig.getResim_list()获得(位置)。
}
众长getItemId(INT位置){    返回的位置;
}公共查看getView(INT位置,查看convertView,父母的ViewGroup){
    ImageView的ImageView的;
    如果(convertView == NULL)
    {
        ImageView的=新ImageView的(上下文);
        imageView.setLayoutParams(新GridView.LayoutParams(100,100));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(5,5,5,5);
    }其他{
        ImageView的=(ImageView的)convertView;    }    imageView.setImageDrawable(LoadImageFromURL(MyGridViewConfig。
            。getResim_list()获得(位置)));
    返回ImageView的;
}私人绘制对象LoadImageFromURL(字符串URL){
    尝试
    {
        InputStream为=(InputStream的)新的URL(网址).getContent();
        可绘制D = Drawable.createFromStream(是,SRC);
        返回D组;
    }赶上(例外五){
        的System.out.println(E);        返回null;
    }
}
}

我的继承人配置的java

 公共类MyGridViewConfig {私有静态的ArrayList<串GT; resim_list =新的ArrayList<串GT;();公共静态的ArrayList<串GT; getResim_list(){
    返回resim_list;}公共静态无效setResim_list(ArrayList的<串GT; resim_list){
    MyGridViewConfig.resim_list = resim_list;
}
公共静态无效addImageUrls(){
    //这里你要指定图像的URL路径    resim_list.add(\"http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg\");
    resim_list.add(\"http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg\");
    resim_list.add(\"http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg\");
    resim_list.add(\"http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg\");
    resim_list.add(\"http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg\");
    resim_list.add(\"http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg\");}
}


解决方案

您不能在你的主UI线程下载图像,这样做在AsyncTask的。创建这个类:

 类LoadImageTask扩展的AsyncTask<弦乐,太虚,可绘制> {
    公共LoadImageTask(ImageView的四)
    {
        ImageView的= IV;
    }
    ImageView的ImageView的;
    保护可绘制doInBackground(字符串的URL ...){
        尝试{
            URLConnection的连接=新的URL(网址[0])的openConnection()。
            connection.connect();
            InputStream为=(InputStream的)connection.getContent();
            可绘制D = Drawable.createFromStream(是,SRC);
            返回D组;
        }赶上(例外五){
            // e.printStackTrace();
            返回null;
        }
    }    保护无效onPostExecute(绘制对象绘制){
        如果(绘!= NULL)
            imageView.setImageDrawable(绘制);
    }
}

然后改变你的getView()函数使用的AsyncTask代替LoadImageFromURL:

  // imageView.setImageDrawable(LoadImageFromURL(MyGridViewConfig。
// getResim_list()获得(位置)));
新LoadImageTask(ImageView的).execute(MyGridViewConfig.getResim_list()获得(位置)。);

I'm trying to make a gridview that shows images and So it shows the gridview but no images, if clicked it boxes the gridview pops out the link. i got no idea why my images is missing on the gridview...

heres my fragment class

public class FragmentD extends Fragment {
    public FragmentD(){}
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_d, container, false);

    try {
        EditText main_searchField = (EditText) rootView.findViewById(R.id.editText_search_d);
        String main_search = main_searchField.getText().toString();

        Spinner main_categoryField = (Spinner) rootView.findViewById(R.id.spinner_d);
        String category = main_categoryField.getSelectedItem().toString();

        GridView main_gridviewField = (GridView) rootView.findViewById(R.id.gridView_main);
        main_gridviewField.setAdapter(new MyGridViewAdapter(getActivity()));


        main_gridviewField.setOnItemClickListener(new AdapterView.OnItemClickListener()  {

            public void onItemClick(AdapterView<?> arg0, View view, int position,long arg3) {
                Toast.makeText(getActivity(), MyGridViewConfig.getResim_list().
                        get(position), Toast.LENGTH_SHORT).show();

            }
        });

        if(main_gridviewField.isActivated()){
            ImageView sad_face = (ImageView)getActivity().findViewById(R.id.imageView_main_sadface);
            sad_face.setVisibility(View.INVISIBLE);
            TextView nosuchdata = (TextView)getActivity().findViewById(R.id.textView_main_nodatafound);
            nosuchdata.setVisibility(View.INVISIBLE);
        }


    } catch (Exception e){
        Toast.makeText(getActivity(), "EPIC FAIL", Toast.LENGTH_LONG).show();
    }

    //new search_mainActivity(getActivity()).execute(main_search, category);

    return rootView;
}

}

heres my adapter

public class MyGridViewAdapter extends BaseAdapter implements ListAdapter {

private Context context;

public MyGridViewAdapter(Context context) {
    super();
    this.context = context;

    MyGridViewConfig.addImageUrls();
}


public int getCount() {
    return MyGridViewConfig.getResim_list().size();

}

public Object getItem(int position) {

    return MyGridViewConfig.getResim_list().get(position);
}


public long getItemId(int position) {

    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if(convertView==null)
    {
        imageView=new ImageView(context);
        imageView.setLayoutParams(new GridView.LayoutParams(100,100));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(5,5,5,5);
    }else{
        imageView=(ImageView)convertView;

    }

    imageView.setImageDrawable(LoadImageFromURL(MyGridViewConfig.
            getResim_list().get(position)));
    return imageView;
}

private Drawable LoadImageFromURL(String url)

{
    try
    {
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src");
        return d;
    }catch (Exception e) {
        System.out.println(e);

        return null;
    }
}
}

heres my config java

public class MyGridViewConfig {

private static ArrayList<String> resim_list=new ArrayList<String>();

public static ArrayList<String> getResim_list() {
    return resim_list;

}

public static void setResim_list(ArrayList<String> resim_list) {
    MyGridViewConfig.resim_list = resim_list;
}
public static void addImageUrls(){
    //  Here you have to specify your image url path

    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");

}
}

解决方案

You can't download the images on your main UI thread, so do it in an AsyncTask. Create this class:

class LoadImageTask extends AsyncTask<String, Void, Drawable > {
    public LoadImageTask(ImageView iv)
    {
        imageView = iv;
    }
    ImageView imageView;
    protected Drawable doInBackground(String... urls) {
        try {
            URLConnection connection = new URL(urls[0]).openConnection();
            connection.connect();
            InputStream is = (InputStream) connection.getContent();
            Drawable d = Drawable.createFromStream(is, "src");
            return d;
        } catch (Exception e) {
            // e.printStackTrace();
            return null;
        }
    }

    protected void onPostExecute(Drawable drawable) {
        if(drawable != null)
            imageView.setImageDrawable(drawable);
    }
}

Then change your getView() function to use the AsyncTask instead of LoadImageFromURL:

// imageView.setImageDrawable(LoadImageFromURL(MyGridViewConfig.
//        getResim_list().get(position)));
new LoadImageTask(imageView).execute(MyGridViewConfig.getResim_list().get(position));

这篇关于有一个GridView显示来自URL路径的图像片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆