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)
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);
}
});
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);
}
}
}
}
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:
Sie finden das gesamte Tutorial hier
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){
}
}
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.
Ä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.
Fügen Sie setOnItemclickListener () für Ihre Listenansicht hinzu.
// 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);
}
});
Benutze das:
Intent appInfo = new Intent(CurrentActivity.this, ApkInfoActivity.class);
startActivity(appInfo);