Как открыть новую активность, щелкнув элемент в списке?

Я не могу начать новое действие, щелкнув элемент в моем списке. Я хочу, чтобы onItemClick мог открыть ApkInfoActivity.. На самом деле, когда я нажимаю, ничего не происходит.

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

    }

Я не могу найти проблему.. Как я могу решить?

РЕДАКТИРОВАТЬ с помощью 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)

person David_D    schedule 29.10.2013    source источник
comment
Intent appInfo = new Intent(ActivityName.this, ApkInfoActivity.class); startActivity(appInfo) этого достаточно, если вы не хотите передавать некоторые значения в ApkInfoActivity   -  person Raghunandan    schedule 29.10.2013
comment
Вы звоните таким образом listView.onItemClickListener ?   -  person Hardik Joshi    schedule 29.10.2013
comment
также есть ли в ваших элементах списка кнопки, чтобы вместо этого они фокусировались   -  person Raghunandan    schedule 29.10.2013
comment
Я не использую listView.onItemClickListener на самом деле... должен ли я это делать?   -  person David_D    schedule 29.10.2013
comment
@Raghunandan в списке нет кнопок ..   -  person David_D    schedule 29.10.2013
comment
@David_D, вам нужно listView.setOnItemClickListener(this), это относится к контексту активности, и ваша активность должна реализовывать OnItemClickListener   -  person Raghunandan    schedule 29.10.2013
comment
@David_D опубликуйте свой код класса, где у вас есть список   -  person Raghunandan    schedule 29.10.2013
comment
Возможный дубликат Listview , открыть новую активность onClick   -  person Suhaib    schedule 04.07.2017


Ответы (10)


Используйте это для выполнения своей работы

 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);
   } 
});
person Rizwan    schedule 29.10.2013
comment
У меня здесь ошибка: new AdapterView.onItemClickListener().. ошибка: AdapterView.onItemClickListener не может быть преобразован в тип - person David_D; 29.10.2013

Вам нужно использовать Intent. Вы также можете передать данные элемента списка, на который нажали, в свою новую активность.

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


        }
    });

}

Выход:

ListView Открыть другое действие OnItemClick

Вы можете найти весь учебник здесь

person Richard Kamere    schedule 27.04.2018

Добавьте setOnItemclickListener() для вашего списка.

person Guna    schedule 29.10.2013
comment
куда мне положить эту часть? - person David_D; 29.10.2013

Использовать это:

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

person GeertG    schedule 29.10.2013

Попробуйте изменить видимость с protected на public для заголовка вашего метода.

Изменить

Теперь, когда я смотрю на это, заголовок вашего метода на самом деле неверен. Должно быть следующее:

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

Переменные должны быть в том же порядке, что и в интерфейсе, который они реализуют.

person Andrew Schuster    schedule 29.10.2013
comment
Я также переопределил метод? - person David_D; 29.10.2013

например, если вы хотите открыть действие на основе текста, который вы щелкаете в списке, то есть если «abcd» является опцией, выбранной в списке, и вы хотите открыть действие с тем же именем «abcd», затем выполните это. .

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

        }


}
person Jagdeesh    schedule 09.05.2015

Даю пояснение к моему ответу. Я предполагаю, что вы установили свой список в том же порядке, что и в вашем опубликованном коде. Я рассмотрю только эту часть вашего кода: super.onListItemClick(l, v, position, id); мне это не нужно. В случае примера, который я привел:

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

Я просто устанавливаю lister в свой список, который я назвал lv, мой адаптер (который является держателем моих элементов списка) устанавливает три переменные: View, int для позиции и long для аргумента: я ссылаюсь на элемент, выбранный на listview по его положению, которое, как обычно, начинается с 0 (хотя вы можете создать экземпляр, чтобы он начинался с любого другого числа, как вы хотите, например, int position=1, начинает счетчик элементов с 1). Отсюда вы можете использовать любую управляющую структуру, чтобы начать действие в соответствии с нажатым элементом, в моем случае я использовал цикл for, так как предположил, что в моем списке есть только три элемента, для более крупных элементов списка вы можете использовать цикл for. Обратите внимание, как я начинаю свою новую активность, сначала ссылаясь на текущую активность следующим образом (SwahiliService.this), которую можно безопасно заменить на (только это ключевое слово), а затем следует за активностью, которую я хочу начать. Я надеюсь, что теперь это более подробно.

person Martin Karari    schedule 30.05.2016

// Добавляем ArrayList и 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);

// Добавляем 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);

// Нажмите на элемент списка, чтобы открыть класс из 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);
        }
    });

СМОТРИТЕ ИЗОБРАЖЕНИЕ НАЗВАНИЙ КЛАССОВ ЗДЕСЬ

person Stack Fox    schedule 13.05.2018
comment
Пожалуйста, размещайте код, а не изображение кода. - person Yeti; 13.05.2018
comment
Извините, вот оно - person Stack Fox; 13.05.2018

person    schedule
comment
Как это отвечает на вопрос? - person Sufian; 10.11.2014
comment
Например, если вы хотите открыть первый вид, т. е. Quiz Trivia, который находится в позиции 0, он откроет желаемый класс, который вы вводите. извините, мой английский слаб. надеюсь, вы поняли. - person Rahul Bhavani; 10.11.2014

person    schedule
comment
Пожалуйста, объясните, как ваш код устраняет проблему для OP. - person techspider; 26.05.2016