2017-06-22 15 views
1

私は平均値を示すTextViewを持っています。クラスはAlertDialogメソッドを持っています。ユーザーがokをクリックし、私のTextViewの値を更新します。別のクラスからレイアウトを制御する方法は?

私はエラーを取得するにはjava.lang.NullPointerException:

を示したいくつかの一つは、どのようにそれを修正し、私が欲しいものを完了するために、事前のおかげで私を教えることができます。あなたはそのインターフェイスのメソッドを実装する必要がありフラグメントと活動のインターフェイスを作成する必要が

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(); 
    } 

} 
+0

contextの内側alertDialogを作成し 'DialogHandler'だけ表示します警告ダイアログ? – Redman

+0

ローカルブロードキャストを使用 – Pavya

+0

@Redman、はい私はそれをしました...良いアイデアですか? –

答えて

0

:ここ

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をcontroll私のクラスである:

TextViewレイアウトクラスは、フラグメント拡張しますフラグメントの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 
    } 
    } 
+0

成功したインターフェイスを作成する方法、私はあまりインターフェイスを使用しないでください、あなたは私にいくつかのポイントを表示できますか? –

0

フラグメント自体の代わりに作成新しい活動

使用getActivity()代わりに新しいアクティビティを作成しなかった

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(); 
    } 
+0

あなたの答えに感謝しますが、別のクラスを作成して完成する方法はありますか?私はちょうどポイントを固執した。 –

関連する問題