0

フラグメントを使用しています。フラグメントからリスナーとして機能するインターフェイスを実装するには、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
}
4

1 に答える 1

1
fragment1 = new FragmentOne();
fragment1.setListener(this);

FragmentOne の新しいインスタンスを作成し、クリック リスナーをその新しいインスタンスに割り当てます。代わりに、レイアウトで既存のフラグメントを見つける必要があります

FragmentManager fm = getSupportFragmentManager(); // or getFragmentManager() if you aren't using the support library
fragment1 = (FragmentOne)fm.findFragmentById(R.id.fragment_one);

次に、リスナーを設定します

fragment1.setListener(this);
于 2013-05-29T23:32:42.703 に答える