在片段中实现 onClickListener

Implementing onClickListener in fragments

我正在将旧的 Android 应用程序从使用不再受支持的 ViewPager 和已弃用的 ActionBar 更新为受支持的 classes。我很难在片段中实现 OnClickListeners 并创建视图。以前 public class myFragment 会扩展 Fragment 并实现 OnClickListener。

以下是我目前的资料。

public class myFragment extends Fragment {
Button btnOne;

@Override
public void onCreate(Bundle savedDataEntryInstanceState) {
    super.onCreate(savedDataEntryInstanceState);
}

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

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    fetchButtonClicks();
}

private void fetchButtonClicks(){
    View view = inflater.inflate(R.layout.my_fragment, container, false);

   btnOne = (Button)view.findViewById(R.id.btnonexml);
   btnOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getActivity(), "BtnOne click event occurred.", Toast.LENGTH_LONG).show();
        }
    });
}

问题在于在 fetchButtonClicks() 中实现视图。 两个问题: 第一,我在这里缺少什么 w/regards 查看创建,第二,是否有更好的方法来构建它?我在这个片段中有十几个按钮。提前致谢。

更新: 下面的代码解决了我在片段中允许 OnClickListeners 的问题。这是我根据响应采用的结构。似乎可以很好地扩展到我的许多按钮。

public class dataEdit extends Fragment {
Button btnUpdateRecord, btnDeleteRecord, btnResetForm, btnFirstRecord, btnPreviousRecord,btnNextRecord, btnLastRecord, btnHelp, btnEditComment;
private Button btnSaveRecord = null; //Make above buttons private and equal null???
private View view = null;
private View v = null;


@Override
public void onCreate(Bundle savedDataEntryInstanceState) {
    super.onCreate(savedDataEntryInstanceState);
    setRetainInstance(true);

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.data_edit, container, false);
    btnSaveRecord = (Button) view.findViewById(R.id.btnSaveRecordxml);
    btnUpdateRecord = (Button)view.findViewById(R.id.btnUpdateRecordxml);
    btnDeleteRecord = (Button)view.findViewById(R.id.btnDeleteRecordxml);
    btnResetForm = (Button)view.findViewById(R.id.btnResetFormxml);
    btnFirstRecord = (Button)view.findViewById(R.id.btnFirstRecordxml);
    btnPreviousRecord = (Button)view.findViewById(R.id.btnPreviousRecordxml);
    btnNextRecord = (Button)view.findViewById(R.id.btnNextRecordxml);
    btnLastRecord = (Button)view.findViewById(R.id.btnLastRecordxml);
    btnHelp = (Button)view.findViewById(R.id.btnDataEditHelpFilexml);
    btnEditComment = (Button)view.findViewById(R.id.btnEditCommentxml);

    return view;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    fetchButtonClicks();
} 

private void fetchButtonClicks(){
    btnSaveRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            saveRecord(v);
        }
    });
    btnUpdateRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            updateRecord(v);
        }
    });
    btnDeleteRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            deleteRecord(v);
        }
    });
    btnResetForm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            resetForm();
        }
    });
    btnFirstRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            firstRecord(v);
        }
    });
    btnPreviousRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            previousRecord(v);
        }
    });
    btnNextRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            nextRecord(v);
        }
    });
    btnLastRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            lastRecord(v);
        }
    });
    btnHelp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showHelpDialog();
        }
    });
    btnEditComment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showCommentEditDialog();
        }
    });
} 

目前这项工作正在进行中:欢迎提出更多建议。谢谢

你不需要 Inflate 视图两次只需将 View 传递到你的 fetchButtonClicks

private void fetchButtonClicks(View view){

   btnOne = (Button)view.findViewById(R.id.btnonexml);
   btnOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getActivity(), "BtnOne click event occurred.", Toast.LENGTH_LONG).show();
        }
    });
}

在您的 onViewCreated() 方法中,只需这样调用即可:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    fetchButtonClicks(view);
}

有效

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_test, container, false);



    button =  (Button)view.findViewById(R.id.btnonexml);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println("Klick");
        }
    });
    return view;
}