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,那么问题将得到解决。如果你创建新的activity
DialogHandler
只是为了显示警报对话框?使用本地broadcast@Redman ,是的,我做到了…有什么好主意吗?你必须在那里调用广播或自定义列表器我想如果你直接在MyDailyInput中调用dialog,你的问题将解决如何创建一个成功的接口,我不太使用接口,你能告诉我一些要点吗?如何创建一个成功的接口,我不太使用接口,你能告诉我一些要点吗?谢谢你的回答,但是有没有办法通过创建另一个类来完成呢?我说得对。谢谢你的回答,但是有没有办法通过创建另一个类来完成它呢?我只是抓住了重点。