私は動物の名前を持つデータベースを持っており、他の列には動物の音があります。リストビューは正常に機能します。次に、アセットからの画像でリストビューを拡張したいと思います。このために、アセットデータを取得して使用する方法について読みました。私が試した例は私にとってうまくいきました。ここで、拡張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;
}
これはまだ解決策ではなく、もう少し調査しています...遅延読み込みの興味深いソースを見つけました