0

私は、ユーザーから入力されたテキストを受け取り、それらをカスタムリストアイテムのテキストビューに配置する予定のアプリケーションを構築しています。ユーザーはAlertDialogにテキストを入力しますが、AlertDialogが終了すると(破棄されると)、入力されたテキストはすべて破棄され、NullPointerExceptionというエラーが表示されます。アラートダイアログからユーザー入力を保存するにはどうすればよいですか?

これは、ダイアログの作成およびデータ検索を処理するコードです:あなたの初期化と

public class AssignmentActivity extends AppCompatActivity { 
    ... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_assignment); 

     ... 

     FloatingActionButton assignmentAddButton = (FloatingActionButton) findViewById(R.id.assignment_add_button); 

     assignmentAddButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       editCourseInfoDialog(); 
      } 
     }); 

    } 

    private void editCourseInfoDialog() { 
     LayoutInflater inflater = LayoutInflater.from(AssignmentActivity.this); 
     View dialogLayout = inflater.inflate(R.layout.assignment_edit_dialog, null); 
     AlertDialog.Builder dialog = new AlertDialog.Builder(AssignmentActivity.this); 
     dialog.setView(dialogLayout); 

     final TextView name = (TextView) dialogLayout.findViewById(R.id.assignmentNameView); 
     final TextView mark = (TextView) dialogLayout.findViewById(R.id.assignmentMarkView); 
     final TextView overallMark = (TextView) dialogLayout.findViewById(R.id.assignmentOverallMarkView); 
     final TextView weight = (TextView) dialogLayout.findViewById(R.id.assignmentWeightView); 

     dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       assignment.setName(String.valueOf(name.getText())); 
       assignment.setMark(Double.valueOf(mark.getText() + "")); 
       assignment.setMarkOutOf(Double.valueOf(overallMark.getText() + "")); 
       assignment.setPercentage(Double.valueOf(weight.getText() + "")); 
       assignmentAdapter.notifyDataSetChanged(); 
       dialog.dismiss(); 
      } 
     }); 

     dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 
     dialog.show(); 
    } 
} 
+1

のように最初に初期化する必要があります。 SharedPreferenceの異なるクラス保存入力で値を使用している場合。 – Kunu

+0

TextViewsはカスタムAlertDialog xmlファイルにフックされます。 'AssignmentActivity.java'ファイルの' activity_assignment.xml'ではありません。 –

+0

小さな問題のコードが多すぎます。関連するコードを投稿する方が良い。 – Kunu

答えて

1

問題。

LayoutInflater inflater = LayoutInflater.from(AssignmentActivity.this); 
View dialogLayout = inflater.inflate(R.layout.assignment_edit_dialog, null); 
AlertDialog.Builder dialog = new AlertDialog.Builder(AssignmentActivity.this); 
dialog.setView(dialogLayout); 

final TextView name = (TextView) dialogLayout .findViewById(R.id.assignmentNameView); 
final TextView mark = (TextView) dialogLayout .findViewById(R.id.assignmentMarkView); 
final TextView overallMark = (TextView) dialogLayout .findViewById(R.id.assignmentOverallMarkView); 
final TextView weight = (TextView) dialogLayout .findViewById(R.id.assignmentWeightView); 

TextViewsがAlertDialogカスタムビューに接続されていると言えば、コンテキストはダイアログビューである必要があります。

あなたは概念の点で学ぶべきことがたくさんあります。あなたのリストを初期化する前に、アダプターを設定しています。あなたはちょうどそのクラスや店舗TextViewの入力のためのグローバル変数を作成し、同じクラス内の値を使用している場合は

assignmentAdapter = new AssignmentListAdapter(assignmentList, this); // at this line **assignmentList** is null as you initiliaze after this line 
assignment = new Assignment(this); 

あなたはこの

assignment = new Assignment(this); 
assignmentAdapter = new AssignmentListAdapter(assignmentList, this); 
+0

ダイアログを追加すると '.findViewById'が赤色に変わります。 –

+0

何らかのエラーが表示されている必要があります。あなたがそれをクリックすると、それを見つけることができます。 – Kunu

+0

'メソッドfindViewById'を解決できません。 –

関連する問題