Android ListView с установленным массивом списков приложений

У меня так много проблем с блоком кода. Я ищу список со списком имен установленных приложений. Я много искал. Позже я нашел код. Я не знаю, что здесь происходит. Это просто раздавит... Пожалуйста, не смейтесь над моим кодом.

listView = (ListView)findViewById(R.id.listView);
    PackageManager packageManager = this.getPackageManager();
    List<ApplicationInfo> appList = packageManager.getInstalledApplications(0);
    List<String> myStrinrgArray = new ArrayList<String>();
    Iterator<ApplicationInfo> it = appList.iterator();
    while (it.hasNext()){
        ApplicationInfo applicationInfo = (ApplicationInfo)it.next();
        String appName = packageManager.getApplicationLabel(applicationInfo).toString();
        myStrinrgArray.add(appName);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2, myStrinrgArray);
        listView.setAdapter(arrayAdapter);
    }

Пожалуйста, помогите кому-нибудь, если это возможно для вас ... Я буду рад этому.

ПРИМЕЧАНИЕ. Я запустил его в эмуляторе.


person user5281686    schedule 04.09.2015    source источник
comment
Можете ли вы опубликовать сообщение об ошибке / журнал?   -  person acostela    schedule 04.09.2015
comment
Ссылка [ссылка] (dropbox.com/s/ug4yz1asokgnr4x/LogCat. txt?dl=0)   -  person user5281686    schedule 04.09.2015
comment
Нет. Это еще не исправлено.   -  person user5281686    schedule 04.09.2015


Ответы (2)


этот должен работать:

listView = (ListView)findViewById(R.id.listView);
PackageManager packageManager = this.getPackageManager();
List<ApplicationInfo> appList = packageManager.getInstalledApplications(0);
List<String> myStrinrgArray = new ArrayList<>();

for (ApplicationInfo applicationInfo : appList) {
    String appName = packageManager.getApplicationLabel(applicationInfo).toString();
    myStrinrgArray.add(appName);
}

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,
            myStrinrgArray);
listView.setAdapter(arrayAdapter);

Обратите внимание, что вы должны использовать simple_list_item_1 для однострочных элементов списка. И, конечно же, создайте arrayAdapter после цикла! (Я заменил цикл while и итератор более простым циклом for)

person Matthias Miro    schedule 04.09.2015
comment
Да да да... Работает. С android.R.layout.simple_list_item_1. Спасибо брат. - person user5281686; 04.09.2015
comment
Но можете ли вы сказать мне разницу между list_item_1 и list_item_2? - person user5281686; 04.09.2015
comment
Хорошо, чувак. Вот я понял. stackoverflow.com/questions/11722885/ - person user5281686; 04.09.2015
comment
да, simple_list_item_2 для 2 строк. Это не работает (насколько мне известно) с ArrayAdapter (поскольку массивы имеют только одно измерение), но с SimpleCursorAdapter. - person Matthias Miro; 04.09.2015

Вы, вероятно, должны посмотреть, что происходит в коде, который вы пишете. Но есть один "очевидный" баг - вы сбрасываете ArrayAdapter для каждого пункта, что не сработает.

Попробуйте это изменение в цикле:

while (it.hasNext()){
    ApplicationInfo applicationInfo = (ApplicationInfo)it.next();
    String appName = packageManager.getApplicationLabel(applicationInfo).toString();
    myStrinrgArray.add(appName);
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2, myStrinrgArray);
listView.setAdapter(arrayAdapter);
person Jim    schedule 04.09.2015
comment
Ошибка... Ссылка на LogCat: (dropbox.com/s/ouyn0ufvxut4lmu/ LogCat2.txt?dl=0) - person user5281686; 04.09.2015
comment
это означает, что simple_list_item_2 не является TextView - см. это: stackoverflow.com/questions/9280965/ - person Jim; 04.09.2015