2016-11-06 2 views
0

대화 상자에 양식을 구현했으며 양수 버튼을 클릭하면 데이터베이스에 새 개체가 만들어집니다. EditText에 대한 전역 변수를 만들었지 만 여전히 작동하지 않습니다. 내가 원하는 곳에서 나는 항상 빈 문자열을 얻는다.DialogFragment의 EditText는 항상 빈 문자열을 반환합니다.

EditText name, desc;

@Override 
@NonNull 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    view = inflater.inflate(R.layout.new_dialog, null); 

    name = (EditText) view.findViewById(R.id.workout_name); 
    desc = (EditText) view.findViewById(R.id.workout_description); 


    builder.setView(inflater.inflate(R.layout.new_dialog, null)).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      MyDbHelper helper = new MyDbHelper (getActivity()); 
      MyObj w = new MyObj(); 

      w.setName(name.getText().toString();); 
      w.setDescription(desc.getText().toString()); 
      w.setLevel(1); 

      long id = helper.createWorkout(w); 
      Toast.makeText(getActivity(), id+"", Toast.LENGTH_LONG).show(); 

      callback.onPositiveButtonClick(); 
     } 
    }).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 

      callback.onNegativeButtonClick(); 

     } 
    }); 

    return builder.create(); 
} 

모든 아이디어를하십시오 : 여기

코드인가?

+0

는 더 문제 ... 응용 프로그램에서 나는 같은 이름이 ...이 난 단지 편집 한 스택 웹 사이트에없는 아니, 내가 어떤 예외 – Aligator

답변

0

아래 코드에서 new_dialog 레이아웃을 팽창 시켰으며 이름과 설명 EditText가이 레이아웃에 속합니다.

view = inflater.inflate (R.layout.new_dialog, null);

name = (EditText) view.findViewById(R.id.workout_name); 
desc = (EditText) view.findViewById(R.id.workout_description); 

그러나 당신은 당신이 new_workout_dialog을 설정하는 대화 상자의 레이아웃을 설정할 때. 당신의 이름과 desc는이 레이아웃에 속하지 않습니다. 건축업자가보기 설정하는 동안

builder.setView(inflater.inflate(R.layout.new_workout_dialog, null)) 

또한, 당신이 new_dialog을 사용하는 경우에도, 이름, DESC는 여전히 관련이없는 것입니다. setView 메서드 내에서 완전히 새로운 뷰를 만들기 때문입니다.

는 다음과 같은 뷰 변수를 사용하여

builder.setView(view, null)) 
+0

죄송이 없습니다 . – Aligator

+0

내 대답 마지막 문장을 읽어보십시오. 오타 일지라도 코드는 여전히 잘못되었습니다. setView 메소드에서 새 뷰를 작성 중입니다. 앞에서 만든 뷰 변수를 사용하십시오. –

+0

오 예! 미안하다 :) 작동하지 않습니다.) 감사합니다. – Aligator

관련 문제