2016-06-21 11 views
0

タイトルには、フラグメント内にカスタムアプリランチャーを作成する必要があります。私はここで読んだいくつかの答えに基づいてコードを作成しましたが、とにかく、その上にアプリを表示することはできません。フラグメント内のGridviewアプリランチャー

これは、アダプタクラスです:

public class ShortcutAdapter extends BaseAdapter { 

    private Context mContext; 
    private List<ResolveInfo> appsList; 
    PackageManager mPackageManager; 


    public ShortcutAdapter(List<ResolveInfo> appsList, Context mContext) { 
     this.appsList = appsList; 
     this.mContext = mContext; 
     mPackageManager = mContext.getPackageManager(); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     ResolveInfo resolveInfo = appsList.get(position); 
     imageView.setImageDrawable(resolveInfo.loadIcon(mPackageManager)); 

     return imageView; 
    } 
} 

そして、これがフラグメントである:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.settings_layout, container, false); 

    GridView mGrid = (GridView) view.findViewById(R.id.gridview); 

    //Load list on adapter 
    mGrid.setAdapter(new ShortcutAdapter(loadApps(), getContext())); 

    //Listener gridview items 
    mGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      ResolveInfo checkedResolveInfo = (ResolveInfo) parent.getItemAtPosition(position); 
      ActivityInfo clickedActivityInfo = checkedResolveInfo.activityInfo; 

      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_LAUNCHER); 
      intent.setClassName(
        clickedActivityInfo.applicationInfo.packageName, 
        clickedActivityInfo.name); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
        | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
      startActivity(intent); 
     } 
    }); 
    return view; 
} 


/*Load apps*/ 
private List<ResolveInfo> loadApps() { 
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

    List<ResolveInfo> appsList = getActivity().getPackageManager().queryIntentActivities(mainIntent, 0); 
    return appsList; 
} 

コードは、あなたがインターネットのまわりのこれについてのいくつかのチュートリアルでは、私の中で見つけることができるのと同じですGridViewにアプリを表示することはできません。

編集 - 以下のどれが何のアプリのアイコンが表示されないことになります

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:columnWidth="120dp" 
     android:numColumns="auto_fit" 
     android:verticalSpacing="10dp" 
     android:horizontalSpacing="10dp" 
     android:stretchMode="columnWidth" 
     android:gravity="center_horizontal" 
     android:layout_marginTop="60dp" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="20dp"/> 
</LinearLayout> 

答えて

1

のxml GridViewのレイアウト。

  1. ShortcutAdapter#getCount() return 0;

    @Override public int getCount(){ return 0; }

  2. (GridView) view.findViewById(R.id.gridview); GridViewの幅は狭いです。背景を追加して確認することができます。

  3. FragmentViewGroupは、幅が間違っています。背景を追加して確認することができます。

+0

投稿を編集してgridviewを追加しました。とにかく、私は 'getCount()'と 'getItemId()'メソッドで私は 'return 0'を持っていることが分かります。私はそこに何を置くべきですか? – masmic

+0

さて、私はこれらのメソッドの変更を解決しました。 – masmic

関連する問題