web-dev-qa-db-fra.com

Android - Comment créer une liste de diffusion cliquable?

Je souhaite que tous les éléments de ma liste de la vue de liste s'ouvrent dans une nouvelle page, de sorte que chaque élément de la liste de consultation s'ouvre sur une nouvelle page noire que je peux utiliser. Je ne sais pas comment mettre cela en œuvre. J'ai cherché pendant des heures et je ne trouve pas de réponse à ma solution. Il serait très apprécié que quelqu'un puisse montrer et/ou expliquer comment faire cela au lieu de fournir un lien, mais cela est utile.

Voici mon code jusqu'à présent:

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

C'est dans mon 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>

Ceci est dans mon activité_main.xml.

Où vais-je à partir de là pour rendre chaque élément de ma liste cliquable et capable de s'ouvrir sur une nouvelle page?

Merci d'avance!

MODIFIER:

Logcat n'est plus pertinent.

10
Michael Abreu

En fait c'est assez facile:

Ceci est votre activité avec ListView, il implémente 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);
    }

Modifier

Le code ci-dessus serait placé dans votre MainActivity.Java. J'ai changé le nom de la classe en MainActivity et le contentView en setContentView(R.layout.activity_main) - Les noms sont ceux d'un projet Android fraîchement créé dans Eclipse. 
S'il vous plaît voir également les 2 nouvelles lignes sous // * Edit * - ceux qui vont définir l'auditeur pour les clics sur les éléments de la liste.

Votre activity_main.xml devrait ressembler à ceci:

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

Le array.xml (pas string.xml) dans votre dossier `res/values ​​/` ressemble à ceci

<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: Si vous copiez et collez ce code, il devrait fonctionner. Mais vous obtiendrez une erreur en cliquant sur un élément car vous n'avez pas encore créé le ListItemDetail.class.

Voici un exemple de ce à quoi cela pourrait ressembler:

Votre 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]);


    }

}

Et son 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>

Si vous copiez passé ce code, cela fonctionnera.

31
Delpes

vous pouvez remplir listview à partir d'un tableau dans string.xml comme ceci

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

et en cliquant sur les éléments listview est une méthode assez simple et facile. Il suffit d’utiliser 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);
    }
});
1
Ram kiran

Vous utilisez la fonction onListItemClick pour configurer votre intention qui charge l'activité suivante et transmet les données.

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
trapper

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

  • Élément de liste

    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);
            }
        }
    });
    
0
Aadil