フラグメントを使用しています。フラグメントからリスナーとして機能するインターフェイスを実装するには、FragmentActivity を拡張するクラスが必要です。gridview からアイテムをクリックすると、onItemClick メソッドが起動しますが、GamePlayActivity で設定してもリスナー変数が null です。
私の理解では、フラグメントをインスタンス化してリスナーを設定するときと、フラグメントクラスで onCreateView() が呼び出されるときの2つの異なることに取り組んでいます。
Google のサンプルは、onClick で同じ実装を行い、機能します。私のものではありません。
たとえば、FragmentActivityおよびFragment クラスを拡張する MainActivity。
フラグメント 1
public class FragmentOne extends Fragment implements OnItemClickListener {
Listener listener = null;
interface Listener {
public void applyGameLogic();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_fragpane, container, false);
GridView gridView = (GridView) layout.findViewById(R.id.grid);
gridView.setAdapter(new ImageAdapter(layout.getContext()));
gridView.setOnItemClickListener(this);
return layout;
}
public void setListener(Listener listener) {
this.listener = listener;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
//listener.applyGameLogic(); this listener is null
}
}
ゲームプレイ アクティビティ
public class GamePlayActivity extends FragmentActivity implements WordPane.Listener, ChainPane.Listener {
private FragmentOne fragment1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.game_container);
fragment1 = new FragmentOne();
fragment1.setListener(this);
}
... applyGameLogic method follows but its empty for now
}