Android 如何从另一个类控制布局?
我有一些显示平均值的Android 如何从另一个类控制布局?,android,Android,我有一些显示平均值的TextView,然后我有一个类有一个AlertDialog方法,我希望用户单击ok并更新我的TextView值 我得到的错误显示为java.lang.NullPointerException: 有人可以教我如何修复它并完成我想要的,提前谢谢 TextViewlayout类扩展了片段: public class MyDailyInput extends Fragment implements View.OnClickListener{ private
TextView
,然后我有一个类有一个AlertDialog
方法,我希望用户单击ok并更新我的TextView
值
我得到的错误显示为java.lang.NullPointerException:
有人可以教我如何修复它并完成我想要的,提前谢谢
TextView
layout类扩展了片段:
public class MyDailyInput extends Fragment implements View.OnClickListener{
private Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_daily_input, container, false);
//contact is my data object , it has data i'm sure.
new DialogHandler(getActivity()).
updateDialog(getResources().getString(R.string.update),
getResources().getString(R.string.cancel), contact);
return view;
}
// Set the average value method
public void setAverageValue(Context context){
avBeMorning.setText(String.valueOf(av.beforeMorning()));
avAfMorning.setText(String.valueOf(av.afterMorning()));
avBeNoon.setText(String.valueOf(av.beforeNoon()));
avAfNoon.setText(String.valueOf(av.afterNoon()));
avBeNight.setText(String.valueOf(av.beforeNight()));
avAfNight.setText(String.valueOf(av.afterNight()));
}
这是我的类,用于控制AlertDialog:
public class DialogHandler extends AppCompatActivity {
private DatabaseHandler db =null;
private Context context;
public DialogHandler(Context context){
this.context = context;
db = new DatabaseHandler(context);
}
// AlertDialog
public void updateDialog(String rightMessage, String leftMessage, final Contact contact) {
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(context);
builder.setMessage(context.getResources().getString(R.string.dataExisted))
.setPositiveButton(rightMessage, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
System.out.println("try to update");
Toast.makeText(context,context.getResources().getString(R.string.updatedSucceed),Toast.LENGTH_SHORT).show();
db.updateContact(contact);
// I try to use this code to
// change my TextView value of
// MyDailyInut layout , but i get error.
new MyDailyInput().setAverageValue(context);
}
});
builder.setNegativeButton(leftMessage, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
}
您必须在fragment中创建一个接口,activity应该实现该接口的方法,并在fragment的onCreate方法上初始化该接口 //碎片
public class FragmentOne extends Fragment {
private OnClicked call;
public interface OnClicked {
void gotoActivity(int value);
}
@Override
public void onAttach(Context context){
super.onAttach(context);
call = (OnClicked) context;
}
//any event
call.gotoActivity(your average value);
}
public class RandomActivity extends Activity implements FragmentOne.OnClicked {
@Override
public void gotoActivity(int value) {
// do here
}
}
您必须在fragment中创建一个接口,activity应该实现该接口的方法,并在fragment的onCreate方法上初始化该接口 //碎片
public class FragmentOne extends Fragment {
private OnClicked call;
public interface OnClicked {
void gotoActivity(int value);
}
@Override
public void onAttach(Context context){
super.onAttach(context);
call = (OnClicked) context;
}
//any event
call.gotoActivity(your average value);
}
public class RandomActivity extends Activity implements FragmentOne.OnClicked {
@Override
public void gotoActivity(int value) {
// do here
}
}
在片段本身内部创建alertDialog,而不是创建新活动 使用
getActivity()
而不是context
public class MyDailyInput extends Fragment implements View.OnClickListener{
private Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_daily_input, container, false);
updateDialog(getResources().getString(R.string.update),
getResources().getString(R.string.cancel), contact);
return view;
}
// Set the average value method
public void setAverageValue(Context context){
avBeMorning.setText(String.valueOf(av.beforeMorning()));
avAfMorning.setText(String.valueOf(av.afterMorning()));
avBeNoon.setText(String.valueOf(av.beforeNoon()));
avAfNoon.setText(String.valueOf(av.afterNoon()));
avBeNight.setText(String.valueOf(av.beforeNight()));
avAfNight.setText(String.valueOf(av.afterNight()));
}
public void updateDialog(String rightMessage, String leftMessage, final Contact contact) {
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(getActivity());
builder.setMessage(getActivity().getResources().getString(R.string.dataExisted))
.setPositiveButton(rightMessage, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
System.out.println("try to update");
Toast.makeText(getActivity(),getActivity().getResources().getString(R.string.updatedSucceed),Toast.LENGTH_SHORT).show();
db.updateContact(contact);
// I try to use this code to
// change my TextView value of
// MyDailyInut layout , but i get error.
setAverageValue(getActivity());
}
});
builder.setNegativeButton(leftMessage, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
在片段本身内部创建alertDialog,而不是创建新活动 使用
getActivity()
而不是context
public class MyDailyInput extends Fragment implements View.OnClickListener{
private Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_daily_input, container, false);
updateDialog(getResources().getString(R.string.update),
getResources().getString(R.string.cancel), contact);
return view;
}
// Set the average value method
public void setAverageValue(Context context){
avBeMorning.setText(String.valueOf(av.beforeMorning()));
avAfMorning.setText(String.valueOf(av.afterMorning()));
avBeNoon.setText(String.valueOf(av.beforeNoon()));
avAfNoon.setText(String.valueOf(av.afterNoon()));
avBeNight.setText(String.valueOf(av.beforeNight()));
avAfNight.setText(String.valueOf(av.afterNight()));
}
public void updateDialog(String rightMessage, String leftMessage, final Contact contact) {
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(getActivity());
builder.setMessage(getActivity().getResources().getString(R.string.dataExisted))
.setPositiveButton(rightMessage, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
System.out.println("try to update");
Toast.makeText(getActivity(),getActivity().getResources().getString(R.string.updatedSucceed),Toast.LENGTH_SHORT).show();
db.updateContact(contact);
// I try to use this code to
// change my TextView value of
// MyDailyInut layout , but i get error.
setAverageValue(getActivity());
}
});
builder.setNegativeButton(leftMessage, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
您是否创建了新的“活动”
DialogHandler
,只是为了显示警报对话框?请使用本地broadcast@Redman ,是的,我做到了…有什么好主意吗?你必须调用广播或自定义列表器。我认为,如果你直接在MyDailyInput中调用dialog,那么问题将得到解决。如果你创建新的activityDialogHandler
只是为了显示警报对话框?使用本地broadcast@Redman ,是的,我做到了…有什么好主意吗?你必须在那里调用广播或自定义列表器我想如果你直接在MyDailyInput中调用dialog,你的问题将解决如何创建一个成功的接口,我不太使用接口,你能告诉我一些要点吗?如何创建一个成功的接口,我不太使用接口,你能告诉我一些要点吗?谢谢你的回答,但是有没有办法通过创建另一个类来完成呢?我说得对。谢谢你的回答,但是有没有办法通过创建另一个类来完成它呢?我只是抓住了重点。