2012-06-15 25 views
5

Ich brauche etwas Hilfe, um einen einfachen Klick in einem Listenansicht Element zu machen, um eine neue Aktivität zu öffnen. Ich habe viele dieser Probleme hier gesehen, aber niemand hat mir geholfen.neue Aktivität auf Klick starten listview item

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; 
     } 

     ... 
    } 
} 

Ich versuchte auch, den nächsten Code hinzufügen, die in der onCreate Methode von CustomListView Klasse, aber es funktioniert nicht entweder

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

"Es funktioniert nicht" ist sehr vage ... Was passiert im ersten Beispiel, wenn Sie auf ein Element klicken? Erhalten Sie Fehler? Bitte poste sie, wenn du es tust. – Sam

+0

@DDjordjevic: Was ist 'eins' in' one.this', das du an den 'Intent'-Konstruktor übergibst? Versuchen Sie 'CustomListView.this'. – Squonk

Antwort

3

die onListItemClick() von Ihrer CustomListView Klasse entfernen und die startActivity() Methode innerhalb der convertView.setOnClickListener() platzieren.

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

Versuchen Sie, die startActivity(new Intent(one.this, two.class)); -Code in

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

Putting Was Bezieht sich einer auf diese? Es sollte ein Context

+0

Dieser Ansatz ist eine von einigen Versuchen, die ich versucht, aber ich habe die folgenden Fehler: Mehrere Markierungen an dieser Linie \t - Es kann keine statische Verweis auf die nicht-statische Methode startActivity (Intent) vom Typ \t Aktivität machen \t - Es ist keine umschließende Instanz des Typs CustomListView im Bereich verfügbar. Ich habe auch die one.class für die richtige Klasse, die ich benutze, geändert, sorry dafür. –

+0

Probieren Sie 'startActivity (new Intent (context, two.class));', da ein Kontext an den 'Adapter' übergeben wird – Nick

+0

-Das funktioniert nicht, ich habe auch schon einmal versucht, wirft den Fehler: Kann keine statische Referenz zu machen die nicht-statische Methode startActivity (Intent) vom Typ Aktivität –

0

In Ihnen Code one.this bezieht sich auf die Context.

Da der Name Ihrer Aktivität CustomListView lautet, sollten Sie CustomListView.this anstelle von one.this schreiben.

Sie könnten auch getApplicationContext() verwenden.

1

Versuchen Sie diesen Code. Ich bin mir sicher, dass es dir helfen wird und setze die Klasse nicht auf eine XML-Datei wie diese;

setContentView(R.layout.second); 

stellen Sie sicher, dass Sie diesen Code oben in der Klasse gesetzt haben, sonst wirst du sind eine Fehlermeldung erhalten, während eine neue Aktivität openin.

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; 
    } 

} 
Verwandte Themen