7

iOSで開発した後、アンドロイドプラットフォームで開発を始めました。私は周りを見て、私はそれを把握するように見えることはできません。 アクションバーのタブが選択された後にグリッドビューを表示しようとしています。フラグメントは、タブバーを制御する主なアクティビティによって表示されます。 問題はコンテキストを渡すことと関係がありますが、わかりません。Image GridViewの内部

ここに私のMainActivity.javaです。これは、フラグメントが初期化され、アクティビティにアタッチされる場所です。フラグメント内のコードなしで動作します。

if (mFragment == null){ 
      mFragment = Fragment.instantiate(mActivity, mClass.getName()); 
      ft.add(android.R.id.content,mFragment,mTag); 
     } else { 
      ft.attach(mFragment); 
     } 

ここは私のPhotosFragment.javaです。これは、グリッドビューにデータを取り込み、表示する場所です。

public class PhotosFragment extends Fragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     GridView gridview = (GridView) this.getActivity().findViewById(R.id.photogridview); 
     gridview.setAdapter(new PhotoImageAdapter(this.getActivity())); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    } 
} 

は、ここに私のPhotoImageAdapter.javaクラスです。これは私が考えるアダプターにイメージが追加される場所です。

public class PhotoImageAdapter extends BaseAdapter { 
    private Context mContext; 

    public PhotoImageAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return mThumbIds.length; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { // if it's not recycled, initialize some attributes 
      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; 
     } 

     imageView.setImageResource(mThumbIds[position]); 
     return imageView; 
    } 

    private Integer[] mThumbIds = { 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7, 
      R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7, 
      R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7 
    }; 
} 

ここでは、phot_ridoutにはid photogridviewのgridviewが含まれています。あなたはタブをクリックし、断片が初期化されるとき、それは

05-29 14:15:43.895: W/dalvikvm(676): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
05-29 14:15:43.925: E/AndroidRuntime(676): FATAL EXCEPTION: main 
05-29 14:15:43.925: E/AndroidRuntime(676): java.lang.NullPointerException 
05-29 14:15:43.925: E/AndroidRuntime(676): at com.corecoders.PhotosFragment.onCreate(PhotosFragment.java:21) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:795) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.app.BackStackRecord.run(BackStackRecord.java:622) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.os.Handler.handleCallback(Handler.java:605) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.os.Handler.dispatchMessage(Handler.java:92) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.os.Looper.loop(Looper.java:137) 
05-29 14:15:43.925: E/AndroidRuntime(676): at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-29 14:15:43.925: E/AndroidRuntime(676): at java.lang.reflect.Method.invokeNative(Native Method) 
05-29 14:15:43.925: E/AndroidRuntime(676): at java.lang.reflect.Method.invoke(Method.java:511) 
05-29 14:15:43.925: E/AndroidRuntime(676): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-29 14:15:43.925: E/AndroidRuntime(676): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-29 14:15:43.925: E/AndroidRuntime(676): at dalvik.system.NativeStart.main(Native Method) 
05-29 14:15:44.494: I/dalvikvm(676): threadid=3: reacting to signal 3 
05-29 14:15:44.514: I/dalvikvm(676): Wrote stack traces to '/data/anr/traces.txt' 
05-29 14:20:43.995: I/Process(676): Sending signal. PID: 676 SIG: 9 

アプリケーションのクラッシュをクラッシュしたときにここで photos_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/photogridview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnWidth="90dp" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center"> 
</GridView> 

EDIT

は、ログレポートです。 私が従うチュートリアルは、android developersサイトのチュートリアルです。

何か助けや説明が素晴らしいでしょう。私が言ったように、私はこれに新しいので、何が起こっているのか理解するのを助けるためのいくつかの指針を持っていることは素晴らしいだろう。

ディスコ

+0

あなたは)(ft.add後ft.commitを()が欠落しています。 – ania

+0

また、断片化されたonCreateViewメソッドが必要です。これは読んでください:http://developer.android.com/guide/topics/fundamentals/fragments.html – ania

+0

これらの提案をありがとうが、私はまだこの問題を打つ点 gridview.setAdapter(新しいPhotoImageAdapter(this.getActivity())); – StuStirling

答えて

20

これは、元のコードにいくつかの簡単な変更が判明し、それが動作します。

ブレークポイントをデバッグして設定した後、PhotoImageAdapterのコンテキストがヌルポインタであったため、アプリケーションがクラッシュすることがありました。それは、私がPhotoFragmentでアダプタを初期化していた方法と、それを初期化していたメソッドでした。 以下は、これに苦労している他の人のために正しく動作するコードです。

@Override 
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.photos_layout,container,false); 
     GridView gridView = (GridView) view.findViewById(R.id.photogridview); 
     gridView.setAdapter(new MyAdapter(view.getContext())); // uses the view to get the context instead of getActivity(). 
     return view; 
    } 

この場合も、これは最善の方法ではないかもしれませんが、この方法は私にとっては効果的です。 (PhotoImageAdapter.javaの名前がMyAdapter.javaに変更されました)

1

こんにちは、私は共有したコードをグリッドビューで作成しましたので、このリンクをチェックしてみてください。デバイスとタブレットの両方のためのフラグメントでgridviewの実装をすべて最高

私の答えでは、これは主に確かに私の答えでこのファイルを確認してください MasterFragment、MasterGridActivity、MyAdapter、gridview。XML

How to Show Different Layouts inside Fragments

関連する問題