web-dev-qa-db-fra.com

Comment ouvrir une nouvelle activité en cliquant sur un élément dans listview?

Je ne peux pas démarrer une nouvelle activité en cliquant sur un élément de ma liste. Je veux que onItemClick puisse ouvrir la ApkInfoActivity .. En fait, quand je clique rien ne se passe.

protected void onItemClick(ListView l, View v, int position, long id, AdapterView<?> parent) {
        super.onListItemClick(l, v, position, id);

       final ApplicationInfo app = applist.get(position);

       PackageInfo packageInfo = (PackageInfo) parent.getItemAtPosition(position);

       AppDataActivity appData = (AppDataActivity) getApplicationContext();
       appData.setPackageInfo(packageInfo);

       Intent appInfo = new Intent(getApplicationContext(), ApkInfoActivity.class);
       startActivity(appInfo);

    }

Je ne trouve pas le problème ..Comment puis-je résoudre?

EDIT avec logcat:

10-29 17:14:07.710: E/AndroidRuntime(3535): FATAL EXCEPTION: main
10-29 17:14:07.710: E/AndroidRuntime(3535): Java.lang.ClassCastException: Android.content.pm.ApplicationInfo cannot be cast to Android.content.pm.PackageInfo
10-29 17:14:07.710: E/AndroidRuntime(3535):     at com.dd.application.MainActivity.onItemClick(MainActivity.Java:369)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.widget.AdapterView.performItemClick(AdapterView.Java:297)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.widget.AbsListView.performItemClick(AbsListView.Java:1149)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.widget.AbsListView$PerformClick.run(AbsListView.Java:2939)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.widget.AbsListView$2.run(AbsListView.Java:3622)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.os.Handler.handleCallback(Handler.Java:730)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.os.Handler.dispatchMessage(Handler.Java:92)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.os.Looper.loop(Looper.Java:137)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Android.app.ActivityThread.main(ActivityThread.Java:5323)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Java.lang.reflect.Method.invokeNative(Native Method)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at Java.lang.reflect.Method.invoke(Method.Java:525)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:743)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:559)
10-29 17:14:07.710: E/AndroidRuntime(3535):     at dalvik.system.NativeStart.main(Native Method)
13
David_D

Utilisez ceci pour faire votre travail

 list.setOnItemClickListener(new AdapterView.onItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
      Intent appInfo = new Intent(YourActivity.this, ApkInfoActivity.class);
       startActivity(appInfo);
   } 
});
18
Rizwan
public class MenuYangu extends ListActivity {

String classes[] = { "Quiz Trivia", "Sign A New User", "Friend List",
"Download A File", "Upload A File", "Select Pdf files", "Memory Game",
"Dzidza Maths", "Write Exam" };

@Override
protected void onCreate(Bundle savedInstanceState) 
{
   // TODO Auto-generated method stub
   super.onCreate(savedInstanceState);
   setListAdapter(new ArrayAdapter<String>(Menuone.this,
   Android.R.layout.simple_list_item_1, classes));

}

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

if (position == 0) {
Intent intent = new Intent(this, QuizActivity.class);
startActivity(intent);
}
else if (position == 1) {
Intent intent = new Intent(this, SignUp.class);
startActivity(intent);
}
 else if (position == 2) {
 Intent intent = new Intent(this, FriendList.class);
 startActivity(intent);
 } 
 }

 }

 }
10
Rahul Bhavani

Vous devez utiliser l’intention. Vous pouvez également transmettre les données d’élément de listview cliquées à votre nouvelle activité.

String classes[] = { "Quiz Trivia", "Sign A New User", "Friend List",
"Download A File", "Upload A File", "Select Pdf files", "Memory Game",
"Dzidza Maths", "Write Exam" };

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                   
Intent intent = new Intent(getApplicationContext(),ApkInfoActivity.class);
                intent.putExtra("name",classes[i]);
                startActivity(intent);


        }
    });

}

Sortie:

 ListView Open Another Activity OnItemClick

Vous pouvez trouver tout le tutoriel ici

1
Richard Kamere

par exemple, si vous voulez ouvrir une activité basée sur le texte, cliquez sur listview, c.-à-d. si "abcd" est l'option sur laquelle vous avez cliqué sur la listview et que vous voulez ouvrir l'activité avec le même nom "abcd", procédez comme suit. .

public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {

    String temp=yourarray[position];


    try{
        Class myclass=Class.forName("yourpackagename."+temp);
        Intent in=new Intent(this,myclass);
        startActivity(in);
        }catch(Exception e){

        }


}
0
Jagdeesh

Donner une explication à ma réponse. Je suppose que vous avez défini votre liste dans l’ordre, tout comme dans votre code envoyé. Je vais seulement passer en revue cette partie de votre code: Super.onListItemClick (l, v, position, id); Je ne crois pas que cela soit nécessaire . Dans le cas de l'exemple que j'ai donné:

lv.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
      if(position==0){
     Intent appInfo = new Intent(SwahiliService.this, DisplayActivity.class);
      startActivity(appInfo);
  } 
      if(position==1){
          Intent english=new Intent(SwahiliService.this,EnglishService.class);
          startActivity(english);
      }
      if(position==2){
          Toast.makeText(getApplicationContext(),"You have selected pst3", Toast.LENGTH_LONG).show();
      }

Je viens de définir un lister sur ma listview que j'ai appelé lv, Mon adaptateur (qui est le détenteur de mes éléments listview) définit trois variables, une vue, un int pour la position et un argument long:, I faites référence à l'élément sélectionné dans listview par sa position qui, comme d'habitude, commence à 0 (bien que vous puissiez l'instancier pour qu'il commence à tout autre nombre que vous le souhaitez e, g int position = 1 démarre le nombre d'éléments à 1) . À partir de là, vous pouvez utiliser n'importe quelle structure de contrôle pour démarrer l'activité en fonction de l'élément sur lequel vous avez cliqué. Dans mon cas, j'ai utilisé une boucle for puisque j'ai supposé que ma liste de vues ne comportait que trois éléments. Pour les éléments de liste plus volumineux, vous pouvez utiliser une boucle for Veuillez noter comment je commence ma nouvelle activité en me référant d’abord à l’activité en cours de la manière suivante (SwahiliService.this), qui peut être remplacée en toute sécurité par (ce mot-clé uniquement), puis en suivant l’activité à laquelle je souhaite commencer ..___ J'espère c'est maintenant plus élaboré. 

0
Martin Karari

Essayez de changer la visibilité de protected à public pour l'en-tête de votre méthode.

Modifier

Maintenant que je regarde, votre entête de méthode est en fait faux. Ce devrait être le suivant:

public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)

Les variables doivent être dans le même ordre que dans l'interface qu'elles implémentent.

0
Andrew Schuster

Ajoutez setOnItemclickListener () pour votre affichage en liste.

0
Guna

// Ajouter ArrayList et ArrayAdapter:

    final ArrayList<String> listItems = new ArrayList<String>();
        listItems.add("image_one");
        listItems.add("image_two");
        listItems.add("image_three");

    ArrayAdapter<String> myArrayAdapter = new ArrayAdapter<>(this, 
        Android.R.layout.simple_list_item_1, listItems);
        myListView.setAdapter(myArrayAdapter);

// Ajouter ArrayList of Classes:

    final ArrayList<Class> intents = new ArrayList<Class>();
        intents.add(image_one.class);
        intents.add(image_two.class);
        intents.add(image_three.class);

// Cliquez sur l'élément de la liste pour ouvrir Class from ArrayList of Classes:

    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int 
        position, long id) {

            Intent listIntent = new Intent(getApplicationContext(), 
            intents.get(position)); 
            startActivity(listIntent);
        }
    });

VOIR L'IMAGE DES NOMS DE CLASSES ICI

0
Armin Hadzic

Utilisez ceci:

Intent appInfo = new Intent(CurrentActivity.this, ApkInfoActivity.class); startActivity(appInfo);

0
GeertG