2013-10-06 12 views
6

私はアクティビティとして動作するgridviewを持つアダプタを持っています。私はそれを断片に入れようとしているのですが、それは機能しません。私のアクティビティにIconFragmentSystemを含めると、アクティビティを開くときに強制終了します。フラグメント内にGridviewを持つAndroid ImageAdapter

他のフラグメントを使用することができ、すべてが問題なく、このファイル内に問題があることがわかっているので、このアクティビティは機能します。

package com.designrifts.ultimatethemeui; 
import com.designrifts.ultimatethemeui.R; 
import android.content.Context; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.*; 

import java.util.ArrayList; 

public class IconFragmentSystem extends Fragment implements AdapterView.OnItemClickListener{ 
private static final String RESULT_OK = null; 
public Uri CONTENT_URI; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.main, container, false); 

    super.onCreate(savedInstanceState); 
    int iconSize=getResources().getDimensionPixelSize(android.R.dimen.app_icon_size); 

    GridView gridview = (GridView) getActivity().findViewById(R.id.icon_grid); 
    gridview.setAdapter(new IconAdapter(this, iconSize)); 
    gridview.setOnItemClickListener(this); 
    CONTENT_URI=Uri.parse("content://"+iconsProvider.class.getCanonicalName()); 
    return view; 
} 

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
    String icon=adapterView.getItemAtPosition(i).toString(); 
    Intent result = new Intent(null, Uri.withAppendedPath(CONTENT_URI,icon)); 
    setResult(RESULT_OK, result); 
    finish(); 
} 
private void setResult(String resultOk, Intent result) { 
    // TODO Auto-generated method stub 

} 

private void finish() { 
    // TODO Auto-generated method stub 

} 
private class IconAdapter extends BaseAdapter{ 
    private Context mContext; 
    private int mIconSize; 
    public IconAdapter(Context mContext, int iconsize) { 
     super(); 
     this.mContext = mContext; 
     this.mIconSize = iconsize; 
     loadIcon(); 
    } 

    public IconAdapter(IconFragmentSystem iconssystem, int iconSize) { 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public int getCount() { 
     return mThumbs.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mThumbs.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(mIconSize, mIconSize)); 
     } else { 
      imageView = (ImageView) convertView; 
     } 
     imageView.setImageResource(mThumbs.get(position)); 
     return imageView; 
    } 

    private ArrayList<Integer> mThumbs; 
    //////////////////////////////////////////////// 
    private void loadIcon() { 
     mThumbs = new ArrayList<Integer>(); 

     final Resources resources = getResources(); 
     final String packageName = getActivity().getApplication().getPackageName(); 

     addIcon(resources, packageName, R.array.systemicons); 

    } 
    private void addIcon(Resources resources, String packageName, int list) { 
     final String[] extras = resources.getStringArray(list); 
     for (String extra : extras) { 
      int res = resources.getIdentifier(extra, "drawable", packageName); 
      if (res != 0) { 
       final int thumbRes = resources.getIdentifier(extra,"drawable", packageName); 
       if (thumbRes != 0) { 
        mThumbs.add(thumbRes); 
       } 
      } 
      } 
      } 
     } 
    } 

私はこれを実装するためのさまざまな方法を試してみましたが、すべては失敗していると私は本当に正しい方向に私を指してヘルプを使用することができます。

これは

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     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="90dp" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
/> 

    </RelativeLayout> 
+0

LogCatはこれについて何を言いますか? –

+0

@Ray Stojonic私がlogcatを実行すると、 'code'10-06 19:10:27.450:E/AndroidRuntime(10180):致命的な例外:メイン 10-06 19:10:27.450:E/AndroidRuntime(10180) :java.lang.NullPointerException 10-06 19:10:27.450:E/AndroidRuntime(10180):\t com.designrifts.ultimatethemeui.IconFragmentSystem.onCreateView(IconFragmentSystem.java:28)だから私はそれがonCreateViewからであることを知っています。私は例を見て、Androidのサイトを読んだが運がなかった。 –

答えて

9

は私が

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

GridView gridview = (GridView) getActivity().findViewById(R.id.icon_grid); 

を変更し、私も

 gridview.setAdapter(new IconAdapter(this, iconSize)); 

を変更し、問題に

を修正することができました

 gridview.setAdapter(new IconAdapter(getActivity(), iconSize)); 
0

GridView gridview = (GridView) getActivity().findViewById(R.id.icon_grid);

GridView gridview = (GridView) container.findViewById(R.id.icon_grid);

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

    int iconSize = getResources().getDimensionPixelSize(android.R.dimen.app_icon_size); 

    GridView gridview = (GridView) view.findViewById(R.id.icon_grid); 
    gridview.setAdapter(new IconAdapter(this, iconSize)); 
    gridview.setOnItemClickListener(this); 
    CONTENT_URI = Uri.parse("content://"+iconsProvider.class.getCanonicalName()); 
    return view; 
} 

はあなたがスーパーへの呼び出しを削除するために行くべきであるレイアウトで、私のxmlです、つまり、あなたから残ったアクティビティ、フラグメントはこれをmと呼ばない民法。

+0

私はそれを追加しても同じエラーが表示されます。私はlogcatだけでなく、動作するコードのバージョンを置くhttp://pastebin.com/ByjyURxsはlogcatです。これは、アクティビティからの作業バージョンです。https://github.com/designrifts/Ultimate_Theme_UI_Template/blob/master/src/com/designrifts/ultimatethemeui/icons.java –

+1

また、oncreateviewのスーパーにコールしないでください。 – r2DoesInc

+0

スーパーを削除しました。 。ありがとう! –

2

これはとして有用でマークしてください

gridView = (GridView) rootView.findViewById(R.id.gridView); 

gridView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view,int pos, long l) { 

       // do something... 

      }    
     }); 

詳細はこのリンク Android gridview in fragment adapter constructor missing

を参照してください...これを試してみてください。

関連する問題