2016-07-28 12 views
-1

上記アクティビティを開くときに、GridViewを表示するMy Activityがクラッシュします。私のコードに何が間違っているか分かりませんが、これに関して私を助けてください。学習GridView

public class AppContainerActivity extends Activity { 

private PackageManager manager; 
public List<AppDetails> apps; 
GridView AppDrawer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_app_container); 

    AppDrawer = (GridView) findViewById(R.id.AppDrawer); 
    AppDrawer.setAdapter(new ItemAdapter(this, apps)); 

} 

//Fetch installed apps on device 
public void loadApps(){ 
    manager = getPackageManager(); 
    apps = new ArrayList<AppDetails>(); 

    Intent getApp = new Intent(Intent.ACTION_MAIN,null); 
    getApp.addCategory(Intent.CATEGORY_LAUNCHER); 

    List<ResolveInfo> availableActivities = manager.queryIntentActivities(getApp, 0); 
    for(ResolveInfo ri : availableActivities){ 
     AppDetails app = new AppDetails(); 
     app.appIcon = ri.activityInfo.loadIcon(manager); 
     apps.add(app); 
    } 
} 

} 

ItemAdapter:

class ItemAdapter extends BaseAdapter { 

Context mContext; 
Integer[] icon; 
ItemAdapter(Context c, List<AppDetails> apps){ 
    mContext = c; 
    icon = apps.toArray(new Integer[apps.size()]); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return icon.length; 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    ImageView appIcon; 
    if(convertView == null) { 
     appIcon = new ImageView(mContext); 
     appIcon.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     appIcon.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     appIcon.setPadding(8, 8, 8, 8); 
    } else { 
     appIcon = (ImageView) convertView; 
    } 
    appIcon.setImageResource(icon[position]); 

    return appIcon; 
} 

} 

AppDetails:

class AppDetails { 
    Drawable appIcon; 
} 

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:gravity="center" 
android:orientation="vertical" > 

<GridView 
    android:id="@+id/AppDrawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:numColumns="auto_fit" 
    android:columnWidth="70dp" 
    android:horizontalSpacing="10dp" 
    android:verticalSpacing="10dp" 
    android:scrollbars="horizontal" 
    android:stretchMode="spacingWidthUniform" 
    /> 

</LinearLayout> 
+0

LinearLayoutでandroid:context = "。AppContainerActivity"を追加してみてください –

+0

catログを提供してください – ddb

+1

GridViewの代わりにリサイクラーとGridLayoutManagerを使用してください。 –

答えて

0

あなたはアダプタに初期化されていないのArrayListを通過し、それがnullだと投げコンストラクションのエラーあなたがリストのサイズを取得するとき

アダプタを設定する前にloadAppsメソッドを呼び出す必要があります。または、arraylistを返すようにして、そのメソッドをアダプターに渡します。

また、BaseAdapterの代わりにArrayAdapter<AppDetails>を拡張するか、nullを戻さないgetItemメソッドを使用してBaseAdapterの実装を完了する必要があります。後でアダプタの要素にアクセスしたい場合。

また、アダプタにarraylistを置くこともできます。配列に変換する必要はありません

+0

私はすでにloadAppsメソッドをそれでもまだクラッシュすると、とにかく私はArrayAdapterを勉強して、私の問題を解決するかもしれません。エラーを指摘してくれてありがとう。 – iamLinker

+0

さて、stacktraceがなければ、実際のエラーを知るのは難しいです。私はちょうど私が見た最初のものを書いた –