2013-05-04 2 views
0

저는 이것이 기본적인 질문이라는 것을 알고 있습니다 만, 저는이 모든 것에 대해 매우 새로운 것입니다. 아래 코드에서이 onPause 메서드가 있습니다.onPause() 메서드에 항목 전달

public void onPause(){ 
    super.onPause(); 
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(input.getWindowToken(), 0); 
} 

input.getWindowToken()의 입력 부분이 작동하지 않습니다. 동일한 범위에서 정의되거나 인스턴스화되지 않았기 때문에 그것이라고 추측합니다. 나는 올바른 용어를 사용하고 있다고 생각한다. 나도 내가 여기에 EditText 객체를 사용하려고 노력해야한다는 점에 대해 긍정적이지는 않지만, 내가하려는 것은 무엇이든지 작동하지 않는 것처럼 보인다.

내 onPause() 메소드 또는 그 밖의 다른 메소드에 어떻게 전달합니까? 모든 코드는 다음과 같습니다.

package com.example.test_project; 

import java.util.Calendar; 

import com.example.test_project.R.string; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.app.TimePickerDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.WindowManager; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.TimePicker; 

public class NewWorkout extends Activity { 
/** Called when the activity is first created. */ 

private TextView mDateDisplay; 
private Button mPickDate; 
private int mYear; 
private int mMonth; 
private int mDay; 

private TextView mTimeDisplay; 
private Button mTimePicker1; 
private int hour; 
private int minute; 
private String zone; 

static final int DATE_DIALOG_ID = 0; 
static final int TIME_DIALOG_ID = 99; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new_workout); 
    final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

    // capture our View elements 
    mDateDisplay = (TextView) findViewById(R.id.dateOfWorkoutTextView); 
    mPickDate = (Button) findViewById(R.id.dateOfWorkoutButton); 
    mTimeDisplay = (TextView) findViewById(R.id.timeOfWorkoutTextView); 
    mTimePicker1 = (Button) findViewById(R.id.timeOfWorkoutButton); 


    // add a click listener to the button 
    mPickDate.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 

    // get the current date 
    final Calendar c = Calendar.getInstance(); 
    mYear = c.get(Calendar.YEAR); 
    mMonth = c.get(Calendar.MONTH); 
    mDay = c.get(Calendar.DAY_OF_MONTH); 

    final Calendar t = Calendar.getInstance(); 
    hour = t.get(Calendar.HOUR_OF_DAY); 
    minute = t.get(Calendar.MINUTE); 

    //set the current time into the textview 



    mTimePicker1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      showDialog(TIME_DIALOG_ID); 
     } 
    }); 

} 

// updates the date in the TextView 
private void updateDisplay() { 
     StringBuilder string1 = new StringBuilder() 
       // Month is 0 based so add 1 
       .append(mMonth + 1).append("-") 
       .append(mDay).append("-") 
       .append(mYear).append(" "); 
    mDateDisplay.setText(string1); 
} 

// the callback received when the user "sets" the date in the dialog 
private DatePickerDialog.OnDateSetListener mDateSetListener = 
     new DatePickerDialog.OnDateSetListener() { 

      public void onDateSet(DatePicker view, int year, 
            int monthOfYear, int dayOfMonth) { 
       mYear = year; 
       mMonth = monthOfYear; 
       mDay = dayOfMonth; 
       updateDisplay(); 
      } 
     }; 

private TimePickerDialog.OnTimeSetListener timePickerListener = 
     new TimePickerDialog.OnTimeSetListener() { 
    public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) { 
     hour = selectedHour; 
     minute = selectedMinute; 
     updateTimeDisplay(); 
    } 
}; 

//set current time into textView 
private void updateTimeDisplay() { 
    if(hour > 12){ 
     hour -= 12; 
     zone = "PM"; 
    } 
    else 
     zone = "AM"; 

    if(minute >= 10){ 
    mTimeDisplay.setText(new StringBuilder().append(hour) 
       .append(":").append(minute).append(" ").append(zone)); 
    } 
    else 
     mTimeDisplay.setText(new StringBuilder().append(hour) 
       .append(":").append("0").append(minute).append(" ").append(zone)); 
} 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, 
       mDay); 
    case TIME_DIALOG_ID: 
     return new TimePickerDialog(this, timePickerListener, hour, minute, false); 
    } 
    return null; 
} 



public void nameOfWorkout(View view){ 
    AlertDialog.Builder nameOfWorkoutAlert = new AlertDialog.Builder(this); 
    nameOfWorkoutAlert.setTitle("Enter a Name for This Workout"); 

    // Set an EditText view to get user input 
    final EditText input = new EditText(this); 
    nameOfWorkoutAlert.setView(input); 
    // Prepping the soft keyboard to open with the AlertDialog 
    final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(input.getWindowToken(), 0); 

    nameOfWorkoutAlert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     String value = input.getText().toString(); 
     TextView edit = (TextView) findViewById(R.id.nameOfWorkoutTextView); 
     edit.setText(value); 
     imm.toggleSoftInput(InputMethodManager.RESULT_HIDDEN, 0); 
     } 
    }); 

    nameOfWorkoutAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      imm.toggleSoftInput(InputMethodManager.RESULT_HIDDEN, 0); 
     } 
    }); 
    //alert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
    nameOfWorkoutAlert.show(); 

    //Causing the soft keyboard to open with the AlertDialog 
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
} 

public void onPause(){ 
    super.onPause(); 
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(input.getWindowToken(), 0); 
} 

public void typeOfWorkout(View view){ 
    final String [] items=new String []{"Weight-lifting","Cardio","Mixture"}; 
    AlertDialog.Builder builder=new AlertDialog.Builder(this); 
    builder.setTitle("Select Today's Workout type"); 

    builder.setItems(items, new android.content.DialogInterface.OnClickListener() { 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    // TODO Auto-generated method stub 
    TextView txt=(TextView)findViewById(R.id.typeOfWorkoutTextView); 
    txt.setText(items[which]); 
    } 
    }); 

    builder.show(); 

} 

} 

감사합니다.

답변

0

클래스에서 변수로 만듭니다.

public class NewWorkout extends Activity { 

    private EditText input 
    ... 
    public void nameOfWorkout(View view){ 
     // Set an EditText view to get user input 
     input = new EditText(this); 
     ... 
    } 

    public void onPause() { 
     if (input != null) { 
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(input.getWindowToken(), 0); 
     } 
     super.onPause(); 
    } 
    ... 
} 
0

글쎄, 이것을 대안으로 사용할 수 있습니다.

public void onPause() 
{ 
    super.onPause(); 
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
}