How open new activity clicking an item in listview?
Asked Answered
C

10

14

I can't start a new activity clicking over an item in my listview. I want that onItemClick can open the ApkInfoActivity.. Actually when i click nothing happen.

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

    }

I can't find the problem..How can i solve?

EDIT with 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)
Custommade answered 29/10, 2013 at 15:18 Comment(8)
Intent appInfo = new Intent(ActivityName.this, ApkInfoActivity.class); startActivity(appInfo) this is sufficient unless you want to pass some values to ApkInfoActivityWellthoughtof
Are you calling in this way listView.onItemClickListener ?Ciliate
also do your list items have buttons so they take focus insteadWellthoughtof
I'm not using listView.onItemClickListener actually.. have i to do it?Custommade
@Wellthoughtof the list doesn't have buttons..Custommade
@Custommade you need listView.setOnItemClickListener(this) this refers to activity context and your activity should implements OnItemClickListenerWellthoughtof
@Custommade post your class code where you have the listWellthoughtof
Possible duplicate of Listview , open new activity onClickOmura
L
19

Use This for doing your work

 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);
   } 
});
Lentigo answered 29/10, 2013 at 15:30 Comment(1)
I have an error here: new AdapterView.onItemClickListener().. the error is: AdapterView.onItemClickListener cannot be resolved to a typeCustommade
I
11
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);
 } 
 }

 }

 }
Integrated answered 10/11, 2014 at 7:11 Comment(2)
How does this answer the question?Osyth
For example , if you want to open first view i.e Quiz Trivia which is at position 0 , it will open the desire class you enter. sorry my english is weak. hope you understood.Integrated
I
2

You need to use Intent, You can also pass the clicked listview item data to your new activity.

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


        }
    });

}

Output:

ListView Open Another Activity OnItemClick

You can find the whole tutorial here

Illuminism answered 27/4, 2018 at 18:19 Comment(0)
G
0

Add setOnItemclickListener() for your Listview.

Guatemala answered 29/10, 2013 at 15:20 Comment(0)
B
0

Use this:

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

Badalona answered 29/10, 2013 at 15:21 Comment(0)
A
0

Try changing the visibility from protected to public for your method header.

Edit

Now that I look at it, your method header is actually wrong. It should be the following:

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

The variables must be in the same order as they are in the Interface they implement.

Adamsite answered 29/10, 2013 at 15:23 Comment(1)
Have i also Override the method?Custommade
E
0

for instance if u want to open an activity based on the text u click in listview,ie if "abcd" is the option clicked on the listview and u want to open the activity with the very same name "abcd",then perform this ..

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

        }


}
Epispastic answered 9/5, 2015 at 17:56 Comment(0)
R
0

Giving an explanation to my answer. I assume that you have set your listview in order just as in your posted code. I will only review this part of your code: super.onListItemClick(l, v, position, id); I don't this is necessary. In the case of the example I gave:

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

I am just setting a lister to my listview which I have called lv, my adapter(which is the holder of my listview items) sets three variables, a View, int for position and long for argument:, I refer to the item selected on listview by its position which as usual starts at 0 (though you can instantiate it to start at any other number as you wish e,g int position=1, starts the item count at 1). From here you can then use any control struct to start activity as per item clicked, in my case, I used a for loop since I assumed my listview has three items only, for larger listview items, you can use a for-loop. Please note how I start my new activity by first referencing to current activity as follows (SwahiliService.this) of which can safely be replace by (this keyword only) and then follows the activity I want to start. I hope this is now more elaborate.

Ranjiv answered 30/5, 2016 at 20:4 Comment(0)
D
0

// Add ArrayList and 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);

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

// Click on list item to open 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);
        }
    });

SEE IMAGE OF CLASS NAMES HERE

Dodds answered 13/5, 2018 at 9:39 Comment(2)
Please post the code and not an image of the code.Medicine
Sorry, there it isDodds
R
-1
    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();
          }
   }});
Ranjiv answered 26/5, 2016 at 17:47 Comment(1)
Please provide explanation of how your code fixes the issue for OP.Fougere

© 2022 - 2024 — McMap. All rights reserved.