2017-12-03 172 views
0

我正在使用以下代码在BaseView上使用BaseAdapter显示图像。代码显示可绘制文件夹内的图像。但我想修改代码,使其显示从以下数组远程图像:如何使用BaseAdapter在ListView中显示远程图像?

String flags[] ={"http://www.website.com/images/usa.png","http://www.website.com/images/china.png","http://www.website.com/images/australia.png","http://www.website.com/images/portugle.png","http://www.website.com/images/norway.png","http://www.website.com/images/new_zealand.png"}; 

能否专家告诉我什么部分需要提前change.Thanks。

MainActivity.java:

public class MainActivity extends Activity { 

    ListView simpleList; 
    String countryList[] = {"USA", "China", "australia", "Portugle", "Norway", "NewZealand"}; 
    int flags[] = {R.drawable.usa, R.drawable.china, R.drawable.australia, R.drawable.portugle, R.drawable.norway, R.drawable.new_zealand}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     simpleList = (ListView) findViewById(R.id.simpleListView); 
     CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), countryList, flags); 
     simpleList.setAdapter(customAdapter); 

     simpleList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       Toast.makeText(getApplicationContext(), "Hello " + countryList[position], Toast.LENGTH_LONG).show(); 


      } 
     }); 
    } 
} 

CustomAdapter.java:

Public class CustomAdapter extends BaseAdapter { 
    Context context; 
    String countryList[]; 
    int flags[]; 
    LayoutInflater inflter; 

    public CustomAdapter(Context applicationContext, String[] countryList, int[] flags) { 
     this.context = context; 
     this.countryList = countryList; 
     this.flags = flags; 
     inflter = (LayoutInflater.from(applicationContext)); 
    } 

    @Override 
    public int getCount() { 
     return countryList.length; 
    } 

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

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

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     view = inflter.inflate(R.layout.activity_listview, null); 
     TextView country = (TextView) view.findViewById(R.id.textView); 
     ImageView icon = (ImageView) view.findViewById(R.id.icon); 
     country.setText(countryList[i]); 
     icon.setImageResource(flags[i]); 
     return view; 
    } 
} 

回答

1

您需要:

1)获取这些图像在一个单独的线程,你可以使用抽射,改造,为此抢劫。

2)根据1)中的任何方法的响应,您必须将您从服务中获得的值的列表传递给适配器的构造函数。您需要为该模型创建一个POJO,该结构将包含来自REST Web服务的所有元素。

3)建议为您的listview的适配器使用一个viewholder,以避免反复膨胀视图。

+0

感谢您的回复。我在android开发方面并不是很有经验,所以你可以指点我一些关于如何编写函数的教程,并从getView中调用它,并将它传递给image数组,以便在listview中显示它们? – user1788736

+0

是的,你可以使用:https://www.simplifiedcoding.net/android-volley-tutorial-fetch-json/ – HaroldSer

+0

稍后,您可以使用jackson数据绑定将响应中的值映射到POJO(模型类)。看到这个链接参考:https://stackoverflow.com/questions/25545984/how-to-use-jackson-objectmapper-to-parse-json-response-to-java-objects – HaroldSer

0

最简单的事情是用GlidePicasso

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 
    view = inflter.inflate(R.layout.activity_listview, null); 
    TextView country = (TextView) view.findViewById(R.id.textView); 
    ImageView icon = (ImageView) view.findViewById(R.id.icon); 
    country.setText(countryList[i]); 

    // Assuming flags is now the list of Strings of image urls 
    GlideApp.with(view.getContext()).load(flags[i]).into(icon); 

    return view; 
} 
+0

感谢您的帖子。你能告诉我如何将GlideApp添加到android studio 2.2吗?我以前从未使用过它。 – user1788736

+0

https://bumptech.github.io/glide/doc/download-setup.html – dominicoder

相关问题