2012-06-15 9 views
5

Necesito ayuda para hacer un simple clic en un elemento de vista de lista para abrir una nueva actividad. He visto un montón de este tipo de problemas aquí, pero nadie me ayudó.iniciar nueva actividad al hacer clic en el elemento de vista de lista

public class CustomListView extends ListActivity { 

    private EfficientAdapter adap; 
    ... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 

     adap = new EfficientAdapter(this); 
     setListAdapter(adap); 


    } 


    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 


     startActivity(new Intent(CustomListView.this, next.class)); 
    } 


    public static class EfficientAdapter extends BaseAdapter implements Filterable { 
     private LayoutInflater mInflater; 
     private Bitmap mIcon1; 
     private Context context; 

     public EfficientAdapter(Context context) { 
      // Cache the LayoutInflate to avoid asking for a new one each time. 
      mInflater = LayoutInflater.from(context); 
      this.context = context; 
     } 

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

      ViewHolder holder; 


      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.adaptor_content, null); 


       convertView.setOnClickListener(new OnClickListener() { 
        private int pos = position; 
        @Override 
        public void onClick(View v) { 


        } 
       }); 



      convertView.setTag(holder); 
      }else{ 
      // Get the ViewHolder back to get fast access to the TextView 
      // and the ImageView. 
      holder = (ViewHolder) convertView.getTag(); 
      } 


      return convertView; 
     } 

     ... 
    } 
} 

me trató también de añadir el siguiente código dentro del método onCreate de la clase CustomListView pero no funciona bien

ListView lv = getListView(); 

// listening to single list item on click 
lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

     startActivity(new Intent(CustomListView.this, next.class)); 

    } 
}); 
+0

"No funciona" es muy vago ... ¿Qué sucede en el primer ejemplo cuando hace clic en un elemento? ¿Recibes algún error? Por favor, publícalas si lo haces. – Sam

+0

@DDjordjevic: ¿Qué es 'uno' como en 'one.this' que pasas al constructor 'Intent'? Prueba 'CustomListView.this'. – Squonk

Respuesta

3

Elimine el onListItemClick() de su clase CustomListView y coloque el método startActivity() dentro del convertView.setOnClickListener().

convertView.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(getApplicationContext(), two.class)); 
    } 
}); 
0

Trate de poner la startActivity(new Intent(one.this, two.class)); -code en

convertView.setOnClickListener(new OnClickListener() { 
    private int pos = position; 
    @Override 
    public void onClick(View v) {...} 
}); 

Lo ¿A esto se refiere uno? Debe ser un Context

+0

Este enfoque es uno de algunos intentos que he intentado, pero me dio los siguientes errores: marcadores múltiples en esta línea \t - No se puede hacer una referencia estática a la startActivity método no estático (Intención) del tipo \t Actividad \t - No se puede acceder a ninguna instancia adjunta del tipo CustomListView en el alcance. También cambié el one.class para la clase correcta que estoy usando, lo siento por eso. –

+0

Pruebe 'startActivity (new Intent (context, two.class));', dado que se pasa un contexto al 'Adapter' – Nick

+0

-No funciona, también lo intenté antes, arroja el error: No se puede hacer una referencia estática a el método no estático startActivity (Intento) del tipo Activity –

0

En su código one.this se hace referencia al Context.

Dado que el nombre de su actividad es CustomListView, debe escribir CustomListView.this en lugar de one.this.

También podría usar getApplicationContext().

1

Pruebe este código. Estoy seguro de que va a ayudarlo y no establecer clases en un archivo xml como este;

setContentView(R.layout.second); 

Asegúrese de que has puesto que el código anterior en su clase, de lo contrario vas a conseguir un error al OPENIN una nueva actividad.

package com.exampled.list; 

import android.os.Bundle; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends ListActivity { 

    String [] names ={ 
     "Iphone", 
     "Samsung", 
     "Nokia", 
     "Ericsson", 
     "BlackBerry", 
     "Benq" 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.activity_main); 
     setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,names)); 
    } 

    public void onListItemClick(ListView Parent, View v, int position,long id){ 
     startActivity(new Intent(MainActivity.this, Second.class)); 
     //Toast.makeText(this, "Clicked on : " + names[position], Toast.LENGTH_LONG).show(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 
Cuestiones relacionadas