webentwicklung-frage-antwort-db.com.de

Wie öffnen Sie eine neue Aktivität, indem Sie auf ein Element in der Listenansicht klicken?

Ich kann keine neue Aktivität starten, indem ich auf einen Eintrag in meiner Listenansicht klicke. Ich möchte, dass onItemClick die ApkInfoActivity öffnen kann. Eigentlich, wenn ich darauf klicke, passiert nichts.

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

    }

Ich kann das Problem nicht finden. Wie kann ich das lösen?

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

Verwenden Sie dies für Ihre Arbeit

 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

Sie müssen Intent verwenden. Sie können die angeklickten Listenansichtselementdaten auch an Ihre neue Aktivität übergeben.

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


        }
    });

}

Ausgabe:

 ListView Open Another Activity OnItemClick

Sie finden das gesamte Tutorial hier

1
Richard Kamere

zum Beispiel, wenn Sie eine Aktivität basierend auf dem Text öffnen möchten, und klicken Sie in der Listenansicht, dh wenn "abcd" die Option ist, die Sie in der Listenansicht angeklickt haben, und Sie die Aktivität mit dem gleichen Namen "abcd" öffnen möchten, führen Sie dies aus. .

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

Gib meiner Antwort eine Erklärung. Ich gehe davon aus, dass Sie Ihre Listenansicht genau wie in Ihrem Code eingestellt haben. Ich werde nur diesen Teil Ihres Codes überprüfen: Super.onListItemClick (l, v, position, id); Dies ist nicht erforderlich . Im Fall des Beispiels, das ich gegeben habe:

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

Ich setze gerade ein Listenfeld in meine Listenansicht ein, das ich lv genannt habe..... Mein Adapter (der die Inhaber meiner Listenlistenelemente ist) setzt drei Variablen, eine Ansicht, eine int für die Position und eine long für das Argument:, .__ Beziehen Sie sich auf den in listview ausgewählten Artikel anhand seiner Position, die wie üblich bei 0 beginnt (obwohl Sie ihn beliebig beliebig anordnen können, e) g = Position = 1, beginnt die Elementzählung bei 1) . Von hier aus können Sie dann eine beliebige Steuerstruktur verwenden, um die Aktivität gemäß angeklicktem Element zu starten. In meinem Fall habe ich eine for-Schleife verwendet, da ich davon ausgegangen bin, dass meine Listenansicht nur aus drei Elementen besteht. Bei größeren Listenansichtselementen können Sie eine for-Schleife verwenden Bitte beachten Sie, wie ich meine neue Aktivität beginne, indem ich zunächst auf die aktuelle Aktivität verweise (SwahiliService.this), die sicher durch (nur dieses Schlüsselwort) ersetzt werden kann, und dann der Aktivität folgt, die ich beginnen möchte . Ich hoffe das ist jetzt ausführlicher. 

0
Martin Karari

Ändern Sie die Sichtbarkeit von protected in public für Ihren Methodenkopf.

Bearbeiten

Nun, wenn ich es mir ansehe, ist Ihr Methodenkopf tatsächlich falsch. Es sollte folgendes sein:

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

Die Variablen müssen in der gleichen Reihenfolge sein wie in der von ihnen implementierten Schnittstelle.

0
Andrew Schuster

Fügen Sie setOnItemclickListener () für Ihre Listenansicht hinzu.

0
Guna

// ArrayList und ArrayAdapter hinzufügen:

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

// Füge ArrayList der Klassen hinzu:

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

// Klicken Sie auf ein Listenelement, um die Klasse aus ArrayList of Classes zu öffnen:

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

SEHEN SIE BILD VON KLASSENNAMEN HIER

0
Armin Hadzic

Benutze das:

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

0
GeertG