有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

布局更改后的java设置onClickListener不起作用

我已经为同一个片段创建了两个不同的布局。一个用于Portrait,第二个用于Landscape。所有按钮ID都是相同的。 我的片段实现了onClickListener。 当我启动应用程序时,onClick工作得很好。不管我是从风景画还是肖像画开始。当我改变方向时,布局会切换,但是onClick不再工作。它只在启动时起作用

public class Navigation extends Fragment implements View.OnClickListener {

private ImageButton addButton;
private ImageButton viewButton;
private ImageButton albumButton;
private ImageButton infoButton;

private Communicator comm;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.navigation_fragment_layout, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    addButton = (ImageButton) getActivity().findViewById(R.id.add_button);
    addButton.setOnClickListener(this);
    viewButton = (ImageButton) getActivity().findViewById(R.id.view_button);
    viewButton.setOnClickListener(this);
    albumButton = (ImageButton) getActivity().findViewById(R.id.album_button);
    albumButton.setOnClickListener(this);
    infoButton = (ImageButton) getActivity().findViewById(R.id.info_button);
    infoButton.setOnClickListener(this);

    comm = (Communicator) getActivity();
    }

@Override
public void onStart() {
    super.onStart();

}

@Override
public void onClick(View v) {
    comm.onFragmentTouch(v.getId());
}
}

共 (2) 个答案

  1. # 1 楼答案

    在创建视图时使用onViewCreated回调,而不是在创建活动时使用onActivityCreated

  2. # 2 楼答案

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    addButton = (ImageButton) getActivity().findViewById(R.id.add_button);
    addButton.setOnClickListener(this);
    viewButton = (ImageButton) getActivity().findViewById(R.id.view_button);
    viewButton.setOnClickListener(this);
    albumButton = (ImageButton) getActivity().findViewById(R.id.album_button);
    albumButton.setOnClickListener(this);
    infoButton = (ImageButton) getActivity().findViewById(R.id.info_button);
    infoButton.setOnClickListener(this);
    
    comm = (Communicator) getActivity();
    }
    

    这里是getActivity()的视图; 为什么要从getActivity()获取它们。从下面的路把他们带走

    public class Navigation extends Fragment implements View.OnClickListener {
    
     private ImageButton addButton;
     private ImageButton viewButton;
     private ImageButton albumButton;
     private ImageButton infoButton;
    
    private Communicator comm;
    private View view;
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
    view = inflater.inflate(R.layout.navigation_fragment_layout, container, `false);`
    return view;
    }
    
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    addButton = (ImageButton) view.findViewById(R.id.add_button);
    addButton.setOnClickListener(this);
    viewButton = (ImageButton) view.findViewById(R.id.view_button);
    viewButton.setOnClickListener(this);
    albumButton = (ImageButton) view.findViewById(R.id.album_button);
    albumButton.setOnClickListener(this);
    infoButton = (ImageButton) view.findViewById(R.id.info_button);
    infoButton.setOnClickListener(this);
    
    comm = (Communicator) this;
    }
    

    让我知道这是否有效