2012-07-05 4 views
0

Я хочу перечислить установленные пользователем приложения в виде списка. Я пробовал много подходов, таких как @android: идентификатор и @ + ид, но ничего, кажется, work..can ктото отметить, что ошибка в этом коде ..listview, предоставляющий исключение во время выполнения

applist.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</LinearLayout> 

listrow.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 

    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="10dp" 
    android:textSize="16sp" 
    android:id="@+id/rowTextView"> 
</TextView> 

класс InstalledApp

public class InstalledApps extends ListActivity{ 

    private ListView listview; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.applist); 

     listview = (ListView)findViewById(R.id.listView1); 

     PackageManager pm = getPackageManager(); 
     List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 

     List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>(); 

     for(ApplicationInfo app : packages) { 
      //checks for flags; if flagged, check if updated system app 
      if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1) { 
       //installedApps.add(app); 
      //it's a system app, not interested 
      } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { 
       //Discard this one 
      //in this case, it should be a user-installed app 
      } else { 
       installedApps.add(app); 
      } 
     } 

     ArrayAdapter<ApplicationInfo> adapter = new ArrayAdapter<ApplicationInfo>(this, 
       R.layout.listrow, installedApps); 
     listview.setAdapter(adapter); 
    } 
} 

ответ

1

Ваш код, кажется, хорошо лишь небольшая ошибка попробовать public class InstalledApps extends Activity вместо от public class InstalledApps extends ListActivity, если вы продляете ListActivity, тогда вы получите сообщение об ошибке Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

+0

Спасибо, продление действия разрешило проблему .. – user340

1

ListActivity имеет расположение по умолчанию, который состоит из петь le, полноэкранный список в центре экрана. Однако, если вы хотите, вы можете настроить макет экрана, установив собственный макет представления с помощью setContentView() в onCreate(). Чтобы сделать это, ваш собственный взгляд должен содержать объект ListView с идентификатором «@android: ID/список» (или список, если это в коде)

Смежные вопросы