我有一个数据库,它有一个动物的名字,在另一列中有动物的声音。列表视图工作正常,现在我想用资产中的图像扩展它。为此,我已经阅读了有关如何获取资产数据并使用它的信息。我尝试过的一个例子对我来说效果很好。现在我想要扩展 BaseAdapter 类中的这个“资产”代码(至少我认为我想要这个)。不幸的是,我做错了什么,因为我不能在 BaseAdapter 中使用 getAssets()。
问题从 try-catch 块开始:“getAssets”没有被识别
我会以哪种方式解决这个问题?创建另一个类,该资产代码可以在扩展的“活动”中运行?还是有更好的方法通过列表视图中的数据库信息显示图像?
感谢您对我熟悉 Android / Java 的支持。
public View getView(int position, View convertView, ViewGroup parent) {
// get view reference
View view = convertView;
// if null
if(view == null) {
// inflate new layout
view = mInflater.inflate(R.layout.layout_list_item, null);
// create a holder
ViewHolder holder = new ViewHolder();
// find controls
holder.txtName = (TextView)view.findViewById(R.id.txtName);
holder.txtPicture = (ImageView)view.findViewById(R.id.txtPicture);
// set data structure to view
view.setTag(holder);
}
// get selected user info
UserInfo userInfo = mListUserInfo.get(position);
// if not null
if(userInfo != null) {
// query data structure
ViewHolder holder = (ViewHolder)view.getTag();
// set data to display
holder.txtName.setText(userInfo.getName() + ", " + userInfo.getPicture() );
try {
// get input stream
InputStream ips = getAssets().open( userInfo.getPicture() + ".jpg");
Log.d("Imageloading", "Reading: " + ips);
// load image as Drawable
Drawable d = Drawable.createFromStream(ips, null);
// set image to ImageView
holder.txtPicture.setImageDrawable( d );
}
catch(IOException ex) {
Log.e("Imageloading", "Could not load '" + ex.getMessage()+ "'!");
}
}
// return view
return view;
}
我刚刚编辑了代码。为了解决 getAssets() 的事情,我做了以下事情:
holder.txtPicture.setImageDrawable(getSomePicture(null, userInfo.getPicture() + ".jpg"));
public Drawable getSomePicture(Context myContext, String WhichPicture) throws IOException {
// get input stream
InputStream ips = myContext.getAssets().open( WhichPicture );
Log.d("Imageloading", "Reading: " + ips);
// load image as Drawable
Drawable d = Drawable.createFromStream(ips, null);
return d;
}
这仍然不是解决方案,正在研究更多......找到延迟加载的有趣来源