0

我正在使用片段。我需要扩展 FragmentActivity 的类来实现从我的片段中充当侦听器的接口。当我从 gridview 单击一个项目时,它会触发 onItemClick 方法,但即使我在 GamePlayActivity 中设置了侦听器变量,它也是 null。

我的理解是,当我实例化我的片段以设置侦听器以及在我的片段类上调用 onCreateView() 时,我正在处理两件不同的事情。

来自 Google 的示例使用 onClick 执行相同的实现,并且可以正常工作。不在我身上。

以 MainActivity 扩展 FragmentActivityFragment 类为例。

片段 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
    }
}

GamePlayActivity

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 回答