Question

La période précédente, j'ai posé une question ici, j'ai beaucoup appris donc je suppose que cela vaut la peine de réessayer.

J'utilise la liste paresseuse de Fedor à partir de ce lien:Chargement paresseux d'images dans ListView

Cela fonctionne comme un charme. Mais, Fedor fait que sa classe principale s'étend Activity à la place de ListActivity. Pour cette raison, je ne peux plus utiliser un écouteur ListItemClick. Eclipse déclare quelques erreurs onListItemClick(). Ça marche quand je tourne

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
     // Intent launcher here
}

dans

   protected void onListItemClick(ListView l, View v, int position, long id) {
     // Intent launcher here
   }

Mais le lanceur d'intention ne fonctionne pas. Ni la notification de toast non plus.

Quand je tourne le Activity dans un ListActivity, Eclipse ne titube pas, mais mon émulateur me donne une fermeture de force.

Comment puis-je obtenir

  • Soit onListItemClick() Cliquez dans l'activité (préférable)
  • Ou est-ce que je transforme le code en un ListActivity Sans force proche?

Merci beaucoup d'avance.

Était-ce utile?

La solution

J'écris ma réponse comme:

1) Le code de @falmarri a besoin d'une mise à jour
2) Mon montage suggéré a été totalement rejeté XD
3) StackOverflow ne me permet pas d'écrire un commentaire.

Voici le code:

ListView listView = (ListView) findViewById(R.id.my_listview_in_layout);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        //Do stuff
        //...
    }
});


Référence: Selon android.widget.adapterview.onitemClickListener , la méthode publique OnItemClick () est la méthode invoquée lorsqu'un élément est cliqué {au lieu d'une méthode protégée inconnue sur listitemclick () }

Autres conseils

Un listItemClickListener est attaché à un ListView. Quand tu as changé ListActivity à Activity, votre classe n'a plus de vue qui lui est associée et donc un Activity La classe n'a aucune idée de quoi faire avec un listitemclickListener.

Il vous suffit d'attacher un auditeur à votre ListView:

listview.setOnItemClickListener(new OnItemClickListener(){
    @Override
    protected void onListItemClick(AdapterView<?> parent, View view, int position, long id){
        //Do stuff
    }
});

J'ai travaillé là-dessus toute la journée et après avoir fait le mien ArrayAdapter Je ne pouvais pas comprendre comment changer de cours dans ma liste.

Voici comment j'ai découvert comment le faire. Après avoir appelé mon tableau, j'ai simplement terminé mon code dans cette méthode en faisant.

ListView lv =getListView();
lv.setOnItemClickListener(this);

Puis après tout mon texte j'ai mis

public void onItemClick(AdapterView<?> arg0, View arg1, int position,
            long arg3) {
    String item = (String) getListAdapter().getItem(position);

    if (item.equals("Economy"))
    {
        Intent intent = new Intent(packages.this, economy.class);
        startActivity(intent);
    }
    else if (item.equals("Basic"))
    {
        Intent intent = new Intent(packages.this, basic.class);
        startActivity(intent);
    }
    else if (item.equals("Professional"))
    {
        Intent intent = new Intent(packages.this, professional.class);
        startActivity(intent);
    }
    else if (item.equals("Custom Applications"))
    {
        Intent intent = new Intent(packages.this, applications.class);
        startActivity(intent);
    }
}

Entre j'ai réussi à personnaliser complètement mon ListView avec des polices et des arrière-plans personnalisés. Je suis sûr qu'une tonne d'entre vous ne s'en soucie pas vraiment. Mais je suis sorti et j'espérais en publiant ceci que je pourrais aider quelqu'un à l'avenir.

Pour un nonListActivity Pour avoir un calendrier-clic pour un ListView, vous devez appeler le setOnItemClickedListener() sur le ListView (vous devrez peut-être obtenir cette utilisation findViewById() Si ça vient de XML)

Plutôt que de simplement remplacer ListActivity's onListItemClickListener(), ici vous auriez votre invocation Activity mettre en place AdapterView.onItemClickedListener() et le passer comme le paramètre à setOnItemClickedListener().

(Si vous lisez le code source pour ListActivity (que je recommande), vous le verrez juste faire exactement cela dans les coulisses en créant un objet d'écouteur interne qui appelle votre remplacement onListItemClick()).

Si vous utilisez ListActivity Ensuite, vous voulez faire quelque chose comme ceci:

public class YourClass extends ListActivity implements OnItemClickListener{

    @Override
    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        setContentView(R.layout.your_layout);

        getListView().setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // your stuff here
    }
}

Ce n'est pas le seul moyen de définir un OnItemClickListener. Regardez d'autres réponses. C'est ainsi que j'aime le faire car c'est plus clair et plus facile à lire.

Fe.java

package com.example.rfe;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class FE extends ListActivity {
 public List<String> d = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.file);
        d = new ArrayList<String>();    
        Scanner in = null;
        File f = new File("/sdcard/input.txt");
        try
        {
        in = new Scanner(new FileReader(f));
        while(in.hasNext()==true)
        {
            d.add(in.nextLine());   
        }
        }catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
        ArrayAdapter<String> fileList =
                  new ArrayAdapter<String>(this, R.layout.row, d);
                 setListAdapter(fileList);
    }
 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) 
 {
     String selection = l.getItemAtPosition(position).toString();
     Toast.makeText(this, selection, Toast.LENGTH_LONG).show();
    super.onListItemClick(l, v, position, id);
}
}

Supposons que vous ayez des fruits de données de données contiennent peu de chaînes. Vous pouvez définir le onCreate() comme suit:

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_fruit,
                FRUITS)); // context is this, style is list_fruit, Context, ,data_binding to FRUITs

Puis écrire le onListItemClick() comme suit:

protected void onListItemClick(ListView parent, View v, int position, long id) {
                Toast.makeText(this,  " You selected  " + FRUITS[position], Toast.LENGTH_SHORT).show();
        }

J'espère que cela fonctionne pour vous :)

J'ai simplement ajouté le suivi onCreate():

    listvview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            setPaymentDetails();
        }
    });

En dehors de onCreate() ajoutée setPaymentDetails():

protected void setPaymentDetails()
{
    Intent intent = new Intent(this, SetPaymentDetailsActivity.class);
    startActivity(intent);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top