FindViewByid에서 Inline 클래스에서 Super에서 Android Change 컨텍스트

StackOverflow https://stackoverflow.com/questions/2430712

  •  19-09-2019
  •  | 
  •  

문제

대화 상자에서 edittext의 값을 얻으려고 노력하고 있습니다. A "*" 'ED 라인 다음 코드에서 SafenameEditText는 NULL입니다. 'findveiwbyid'가 'alertdialog.onclicklistener'의 맥락에서 검색하고 있기 때문에 가정합니다. 'FindViewByid'호출의 맥락을 얻거나 변경하려면 어떻게해야합니까?

 protected Dialog onCreateDialog(int id) {
  AlertDialog.Builder builder = new AlertDialog.Builder(this);

  switch(id){
   case DIALOG_NEW_SAFE:
    builder.setTitle(R.string.news_safe);
    builder.setIcon(android.R.drawable.ic_menu_add);

    LayoutInflater factory = LayoutInflater.from(this); 
    View newSafeView = factory.inflate(R.layout.newsafe, null);

    builder.setView(newSafeView);
    builder.setPositiveButton(R.string.ok, new AlertDialog.OnClickListener(){
     public void onClick(DialogInterface dialog, int which) {
 *     EditText safeNameEditText = (EditText) findViewById(R.id.new_safe_name);
      String safeName = safeNameEditText.getText().toString();
      Log.i(LOG, safeName);
      setSafeDao(safeName);
     }     
    });

    builder.setNegativeButton(R.string.cancel, new AlertDialog.OnClickListener(){
     public void onClick(DialogInterface dialog, int which) {
      dialog.dismiss();
     } 
    });
    return(builder.create());
   default:
    return(null);
  }
 }
도움이 되었습니까?

해결책

대화 상자에는 해당 EditText 필드가 표시되지 않으므로보기를 참조해야한다고 생각합니다.

editText safenameEditText = (editText) NewSafeView.findViewById (r.id.new_safe_name);

다른 팁

실제로 당신의 질문에 대한 답은 아니지만 이것은 당신이하려는 일을 달성하는 데 도움이 될 것입니다 ...

final EditText safeNameEditText = (EditText) findViewById(R.id.new_safe_name);
builder.setPositiveButton(R.string.ok, new AlertDialog.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
    String safeName = safeNameEditText.getText().toString();
    Log.i(LOG, safeName);
    setSafeDao(safeName);
}     
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top