の各アイテムが1と4で構成されListView
ているAndroidでを構築しようとしています。拡張された私のクラスのは次のように定義されています。ListView
ImgeView
TexView
getView
BaseAdapter
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holder;
if(vi == null) {
LayoutInflater inflater = (LayoutInflater) Activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.item_lista_restaurantes, null);
holder = new ViewHolder();
holder.nombreRestaurante= (TextView) vi.findViewById(R.id.etiquetaNombreResItemRes);
holder.direccionRestaurante = (TextView) vi.findViewById(R.id.etiquetaDireccionResItemRes);
holder.ciudadRestaurante = (TextView) vi.findViewById(R.id.etiquetaCiudadResItemRes);
holder.telefonoRestaurante = (TextView) vi.findViewById(R.id.etiquetaTelResItemRes);
holder.lineaLogo = (TextView) vi.findViewById(R.id.etiquetaLineaLogo);
vi.setTag(holder);
}
else
{
holder = (ViewHolder)vi.getTag();
}
itemRestaurante item= this.itemR.get(position);
ImageView image = (ImageView) vi.findViewById(R.id.imageLogoItemRestaurante);
int imageResource = this.Activity.getResources().getIdentifier(item.getRutaImaLogo(), null, this.Activity.getPackageName());
image.setImageDrawable(this.Activity.getResources().getDrawable(imageResource));
holder.nombreRestaurante.setText(item.getNombreR());
holder.direccionRestaurante.setText(item.getDireccionR());
holder.ciudadRestaurante.setText(item.getCiudadR());
holder.telefonoRestaurante.setText(item.getTelR());
holder.lineaLogo.setText(item.getDireccionR());
return vi;
}
のコード行getView
:
ImageView image = (ImageView) vi.findViewById(R.id.imageLogoItemRestaurante);
int imageResource = this.Activity.getResources().getIdentifier(item.getRutaImaLogo(), null, this.Activity.getPackageName());
image.setImageDrawable(this.Activity.getResources().getDrawable(imageResource));
これは、rutaImagenLogo値を返すitemRestaurantesクラスです。
package clasesExtras;
public class itemRestaurante {
private long idRestaurante;
private String nombreRestaurante;
private String direccionRestaurante;
private String ciudadRestaurante;
private String telefonoRestaurante;
private String rutaImagenLogo;
//private String rutaImagenGo;
//private String rutaImagenLineaLogo;
/*Constructor*/
public itemRestaurante(long id, String nombre, String direccion, String ciudad,
String telefono, String rutaLogo){
this.idRestaurante= id;
this.nombreRestaurante= nombre;
this.direccionRestaurante= direccion;
this.ciudadRestaurante= ciudad;
this.telefonoRestaurante= telefono;
this.rutaImagenLogo= rutaLogo;
//this.rutaImagenGo= rutaGo;
//this.rutaImagenLineaLogo = rutaLineaLogo;
}
public long getId(){
return this.idRestaurante;
}
public void setId(long id){
this.idRestaurante= id;
}
public String getNombreR(){
return this.nombreRestaurante;
}
public void setNombreR(String nombre){
this.nombreRestaurante=nombre;
}
public String getDireccionR(){
return this.direccionRestaurante;
}
public void setDireccionR(String direccion){
this.direccionRestaurante=direccion;
}
public String getCiudadR(){
return this.ciudadRestaurante;
}
public void setCiudadR(String ciudad){
this.ciudadRestaurante= ciudad;
}
public String getTelR(){
return this.telefonoRestaurante;
}
public void setTelR(String telefono){
this.telefonoRestaurante= telefono;
}
public String getRutaImaLogo(){
return this.rutaImagenLogo;
}
public void setRutaImaLogo(String imagenLogo){
this.rutaImagenLogo= imagenLogo;
}
これは、ArrayListにListViewの各アイテムの情報を入力するアクティビティクラスです。
package appetite.apptitud;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import clasesExtras.ArrayAdapterRestaurantes;
import clasesExtras.itemRestaurante;
public class ListaRestaurantes extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.lista_restaurantes);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); //forza a android a ocultar el teclado virtual
ListView lista = (ListView)findViewById(R.id.listaRestaurantes);
ArrayList<itemRestaurante> itemRestaurante = obtenerItems();
ArrayAdapterRestaurantes adapter = new ArrayAdapterRestaurantes(this, itemRestaurante);
lista.setAdapter(adapter);
}
//Método para llenar la lista de los restaurantes.
private ArrayList<itemRestaurante> obtenerItems(){
ArrayList<itemRestaurante> items = new ArrayList<itemRestaurante>();
items.add(new itemRestaurante(1, "Frisby", "Cra. 7a 24-74", "Pereira", "3168899", "drawable/frisby_logo"));
items.add(new itemRestaurante(2, "Big Pollo", "Cra. 5a 34-12", "Pereira", "3147152", "drawable/bigpollo"));
items.add(new itemRestaurante(3, "Wingz", "Cra. 8a 18-62", "Pereira", "3391000", "drawale/wingz"));
items.add(new itemRestaurante(4, "Sir Pollo", "Cra. 7a 20-04", "Pereira", "3357913", "drawable/sirpollo"));
return items;
}
上記のコードは、それが保存されている画像パス(描画可能フォルダー)を参照し、リストビューの各項目にこの画像を表示したいのですが、これは次のエラーにジャンプします:
FATAL EXCEPTION: main
android.content.res.Resources$NotFoundException:Resource ID #0x0
at android.content.res.Resources.getValue(Resources.java:1014)
at android.content.res.Resources.getDrawable(Resources.java:659)
at clasesExtras.ArrayAdapterRestaurantes.getView(ArrayAdapterRestaurantes.java:56)
imageResource
値が0であると言う人もいます。0は有効なリソースIDではありません。この値を修正するにはどうすればよいですか?助けてください、私はそれを理解していません