2012-11-08 19 views
8

Voglio rendere tutte le mie voci di lista in listview aprirsi in una nuova pagina, così ogni voce di listview si apre su una nuova pagina nera che posso usare. Non so come implementarlo affatto. Ho cercato ore e ore e non riesco a trovare una risposta alla mia soluzione. Sarebbe molto apprezzato se qualcuno potesse mostrare e/o spiegare come farlo invece di fornire un collegamento, ma è utile.Android - Come creare listview cliccabili?

Ecco il mio codice finora:

<string-array name="sections"> 
    <item >Pro Constructive</item> 
    <item >Con Constructive</item> 
    <item >1st Speaker Cross</item> 
    <item >Pro Rebbutal</item> 
    <item >Con Rebuttal</item> 
    <item >2nd Speaker Cross</item> 
    <item >Pro Summary</item> 
    <item >Con Summary</item> 
    <item >Grand Cross</item> 
    <item >Pro Final Focus</item> 
    <item >Con Final Focus</item> 
</string-array> 

Questo è a mio string.xml

<ListView 
    android:id="@+id/listView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:entries="@array/sections" > 
</ListView> 

Questo è a mio activity_main.xml.

Dove vado da qui per rendere ogni elemento della mia lista cliccabile e in grado di aprirsi su una nuova pagina?

Grazie in anticipo!

EDIT:

Logcat non è più rilevante.

risposta

29

In effetti è abbastanza semplice:

questa è la tua attività con il ListView, si implementa un OnItemClickListener:

public class MainActivity extends Activity implements OnItemClickListener { 

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

     //* *EDIT* * 
     ListView listview = (ListView) findViewById(R.id.listView1); 
     listview.setOnItemClickListener(this); 
    } 

    public void onItemClick(AdapterView<?> l, View v, int position, long id) { 
     Log.i("HelloListView", "You clicked Item: " + id + " at position:" + position); 
      // Then you start a new Activity via Intent 
      Intent intent = new Intent(); 
      intent.setClass(this, ListItemDetail.class); 
      intent.putExtra("position", position); 
      // Or/And 
      intent.putExtra("id", id); 
      startActivity(intent); 
    } 

Modifica

Il codice di cui sopra sarebbe inserito nel MainActivity.java. Ho cambiato il nome della classe in MainActivity e contentView in setContentView(R.layout.activity_main) - I nomi sono quelli di un progetto Android appena creato in Eclipse.
Vedere anche le 2 nuove righe in // * Modifica * - quelle imposteranno il listener per i clic sugli elementi nell'elenco.

tuo activity_main.xml dovrebbe essere simile a questo:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:entries="@array/sections" > 
    </ListView> 
</RelativeLayout> 

Il array.xml (non string.xml) nelle `res/valori /` cartella appare così

<resources> 
    <string-array name="sections"> 
     <item >Pro Constructive</item> 
     <item >Con Constructive</item> 
     <item >1st Speaker Cross</item> 
     <item >Pro Rebbutal</item> 
     <item >Con Rebuttal</item> 
     <item >2nd Speaker Cross</item> 
     <item >Pro Summary</item> 
     <item >Con Summary</item> 
     <item >Grand Cross</item> 
     <item >Pro Final Focus</item> 
     <item >Con Final Focus</item> 
    </string-array> 
</resources> 

NB: se si copia & incollare questo codice, dovrebbe funzionare. Ma riceverai un errore facendo clic su un elemento perché non hai ancora creato lo ListItemDetail.class.

Ecco un esempio di come questo potrebbe apparire:

tuo ListItemDetail.java:

public class ListItemDetail extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_listitem); 

    Intent intent = getIntent(); 
    int position = intent.getIntExtra("position", 0); 

    // Here we turn your string.xml in an array 
    String[] myKeys = getResources().getStringArray(R.array.sections); 

    TextView myTextView = (TextView) findViewById(R.id.my_textview); 
    myTextView.setText(myKeys[position]); 


    } 

} 

E la sua activity_listitem.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/my_textview"/> 

</LinearLayout> 

Se si copia passato questo codice che funzionerà.

+0

Mi dispiace, io sono nuovo a questo. Lo posizionerei nel file string.xml o activity_main.xml e dovrei sostituire qualcosa in questo con le mie informazioni personali? –

+0

Ho modificato la mia risposta. Spero che questo ti porti sulla giusta strada :) – Delpes

+0

Okay, come hai detto tu, mi dà un errore, ma ho aggiunto l'activity_listitem.xml e ListItemDetail.java e non so perché l'app FC, soprattutto perché ho nessun errore. –

0

Si utilizza la funzione onListItemClick per impostare l'intenzione che carica l'attività successiva e passa tutti i dati.

public void onListItemClick(ListView parent, View view, int position, long id) 
{ 
    Intent intent = new Intent(this, AnotherActivity.class); 
    intent.putExtra("position", position); 
    startActivity(intent); 
} 
0

è possibile popolare ListView dalla matrice in string.xml come come questo

String[] myKeys = getResources().getStringArray(R.array.sections); 
ListView mListView = (ListView)findViewById(R.id.listView1); 
mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myKeys)); 

e cliccando sugli elementi ListView è abbastanza semplice e l'uso method.just facile setOnItemClickListener

mListView.setOnItemClickListener(new OnItemClickListener() 
{ 
    public void onItemClick(AdapterView<?> arg0,View arg1, int position, long arg3) 
    { 

     Intent n = new Intent(getApplicationContext(), yourclass.class); 
     n.putExtra("position", position); 
     startActivity(n); 
    } 
}); 
0

listView = (ListView) findViewById (R.id.listview);

  • voce dell'Elenco

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    
         if(position==0){ 
          Intent i=new Intent(MainActivity.this,Main3Activity.class); 
          startActivity(i); 
         } 
        } 
    });