有一个GridView显示来自URL路径的图像片段 [英] Fragment having a GridView to show images from url path
本文介绍了有一个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屋!
查看全文