如何解决在片段中实现 onClickListener
我正在将旧的 Android 应用程序从使用不再受支持的 ViewPager 和已弃用的 ActionBar 更新为受支持的类。我很难在我的片段中实现 OnClickListeners 并创建视图。以前的公共类 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,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() 中实现视图。 两个问题:第一,我在这里缺少什么关于查看创作的内容,第二,是否有更好的方法来构建它?我在这个片段中有十几个按钮。提前致谢。
更新:下面的代码解决了我在 Fragments 中允许 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,Bundle savedInstanceState) {
view = inflater.inflate(R.layout.data_edit,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,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();
}
});
}
这是一项正在进行的工作:欢迎提供更多建议。谢谢。
解决方法
您不需要膨胀两次视图只需将视图传递到您的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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。