使用自定义列表视图

时间:2016-10-09 18:59:23

标签: android listview android-studio

我一直在做自定义ListView,当我点击ListView上的某个元素时,我想打开另一个类。

所以我启动了一个Adapter,class,activity及其.xml文件。

类别:

public class DatosMercado {
protected Drawable foto;
protected String titulo;
protected String info;
protected long id;

public DatosMercado(Drawable foto, String titulo, String info){
    this.foto = foto;
    this.titulo = titulo;
    this.info = info;


}

public Drawable getFoto(){
    return foto;
}

public void setFoto(Drawable foto){
    this.foto = foto;
}
public String getTitulo(){
    return titulo;
}

public void setTitulo(String titulo){
    this.titulo = titulo;
}

public String getInfo(){
    return info;
}

public void setInfo(String info){
    this.info = info;
}

public long getId(){
    return id;
}
public void setId(long id){
    this.id = id;
}

}

适配器:

public class AdapterDatosMercado extends BaseAdapter {

protected Activity activity;
//Asignamos la clase DatosMercado al arrayadapter
protected ArrayList<DatosMercado> items;

//Metodo constructor de la clase
public AdapterDatosMercado(Activity activity, ArrayList<DatosMercado> items){
    this.activity = activity;
    this.items = items;
}
@Override
public int getCount() {
    return items.size();
}

@Override
public Object getItem(int position) {
    return items.get(position);
}

@Override
public long getItemId(int position) {
    return items.get(position).getId();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;
    //Asociar el Layout de la lista que hemos creado
    if(convertView == null){
        LayoutInflater inf = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inf.inflate(R.layout.mercado2, null);
    }
    //Creamos un objeto de la clase DatosMercado
    DatosMercado datos = items.get(position);
    //Relleno la foto
    ImageView foto = (ImageView) v.findViewById(R.id.Photo);
    foto.setImageDrawable(datos.getFoto());
    //Rellenamos el nombre
    TextView titulo = (TextView) v.findViewById(R.id.Title);
    titulo.setText(datos.getTitulo());
    //Rellenamos la informacion
    TextView info = (TextView) v.findViewById(R.id.Description);
    info.setText(datos.getInfo());

    //retornamos la vista
    return v;
}

}

我在活动上遇到问题,如果我在错误中说明该代码:

无法启动活动ComponentInfo {edu.upc.com.game/edu.upc.com.game.Mercado}:java.lang.RuntimeException:您的内容必须具有一个ListView,其id属性为'android.R.id .LIST'

这是我的代码:

public class Mercado extends ListActivity  {

String classnames[] = {"BuscarColtan"};
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mercado);

    ListView lista = (ListView) findViewById(R.id.listamoviles);
    ArrayList<DatosMercado> arraydatos = new ArrayList<DatosMercado>();
    DatosMercado datos;

    //Datos introducidos

    datos = new DatosMercado(getResources().getDrawable(R.drawable.ipear), "IPear", "La mejor marca del mundo");
    arraydatos.add(datos);
    datos = new DatosMercado(getResources().getDrawable(R.drawable.ipear), "Bensung", "Moviles Star de alta gama");
    arraydatos.add(datos);
    datos = new DatosMercado(getResources().getDrawable(R.drawable.ipear), "HiYou", "Venimos desde China a dar el salto al mercado europeo");
    arraydatos.add(datos);
    datos = new DatosMercado(getResources().getDrawable(R.drawable.ipear), "IQ", "Moviles de alta tecnologia a bajo coste");
    arraydatos.add(datos);
    datos = new DatosMercado(getResources().getDrawable(R.drawable.ipear), "Zonya", "No te resistiras a comprar nuestros Hesperia");
    arraydatos.add(datos);
    datos = new DatosMercado(getResources().getDrawable(R.drawable.ipear), "Hullaguey", "Los mobiles mas baratos");
    arraydatos.add(datos);


    //Crear el Adapter personalizado
    AdapterDatosMercado adapter = new AdapterDatosMercado(this,arraydatos);

    //Aplicarlo
    lista.setAdapter(adapter);




}

protected void onListItemClick(ListView lv, View v, int position, long id){
    super.onListItemClick(lv,v,position,id);
    String openClass = classnames[position];
    try {
        Class selected = Class.forName("edu.upc.com.game. "+ openClass);
        Intent selectedIntent = new Intent(this,selected);
        startActivity(selectedIntent);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

}

ListView的原始名称是:

android:id="@+id/listamoviles"

我把它改为:

android:id="@android:id/list"

但是现在我遇到了这条线的问题:

ListView lista = (ListView) findViewById(R.id.listamoviles);

我必须定义列表视图原因,如果我不这样做它不起作用。如果我删除onListItemClick并将ListActivity更改为Activity但是我想通过单击自定义列表视图打开另一个活动(类),该应用程序将起作用。

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果延长// Route::any : it means that it will allow all method like get,post,put,patch... Route::any('/send', function() { return Mail::send('email.send', ['name' => 'Its me'], function($message) { $name = "Name"; $message->from('no-reply@xxxxx.com',$name); $message->to('kroy.webxpert@gmail.com')->subject('Test Mail'); }); }); 然后删除此行

ListActivity

也替换

 ListView lista = (ListView) findViewById(R.id.listamoviles);

通过

  lista.setAdapter(adapter);