我正在Android Studio創建一個健身房應用程序,我試圖實現的第一個功能是讓用戶通過單擊操作欄中的某個選項來創建鍛鍊以添加它。點擊此按鈕會彈出一個警告對話框,其中帶有一個EditText字段以輸入鍛鍊名稱。稍後,我將使用輸入創建一個列表視圖,其中添加了不同的鍛鍊,但現在我只關心從EditText字段捕獲輸入。從操作欄菜單項捕獲用戶輸入
這是應該發生什麼..在this screen我點擊+按鈕,它帶出一個帶有EditText字段的警告對話框。我想在java主要活動文件中捕獲這個input。
這裏是java MainActivity文件。我希望EditText字段的輸入存儲在m_Text變量中。
public class MainActivity extends AppCompatActivity {
private String m_Text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
//Clicking add workout button in the action bar
//stackoverflow.com/questions/13143006/alert-dialog-from-within-onooptionsitemselected-android
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.action_add_workout:
//final EditText mAddWorkout = (EditText)R.layout.userinput;
//Creating the dialog box for entering the workout name
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Enter the workout name");
//Create the user input xml file into a java object; capturing the user input from the dialog box
//inflate means "fill"
View view = LayoutInflater.from(this).inflate(R.layout.userinput,null);
final EditText mAddWorkout = (EditText)view.findViewById(R.id.workout_name_input);
builder.setView(R.layout.userinput);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m_Text = mAddWorkout.getText().toString();
boolean brkpt = true;
}
}); //Second parameter pass in which event listener should trigger when the button is clicked
builder.setNegativeButton("Cancel",null);
builder.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
這裏是我的動作條菜單項XML用於添加鍛鍊名稱(main_menu.xml)
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_add_workout"
android:icon="@drawable/ic_add"
android:title="@string/add_workout"
app:showAsAction="always"/>
</menu>
末,該XML的EditText上(userinput.xml)
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/workout_name_input"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="name..">
</EditText>
當我調試我的代碼時,如果我在EditText字段中輸入鍛鍊名稱,m_Text變量總是空的。我一直堅持這幾天,我已經梳理youtube,所以作爲答案,並沒有發現與我的問題很多有關。 任何有識之士,非常感謝。謝謝。
編輯:更新了MainActivity的代碼。我可以將控制傳遞給自定義點擊器,但輸入仍未保存。由於
public class MainActivity extends AppCompatActivity {
private EditText mAddWorkout;
public class CustomClickListener implements View.OnClickListener {
private final Dialog dialog;
CustomClickListener(Dialog dialog) {
this.dialog = dialog;
}
@Override
public void onClick(View v) {
String editTextValue= mAddWorkout.getText().toString();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
//Clicking add workout button in the action bar
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.action_add_workout:
//final EditText mAddWorkout = (EditText)R.layout.userinput;
//Creating the dialog box for entering the workout name
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Enter the workout name");
//Create the user input xml file into a java object; capturing the user input from the dialog box
//inflate means "fill"
View view = LayoutInflater.from(this).inflate(R.layout.userinput,null);
mAddWorkout = (EditText)view.findViewById(R.id.workout_name_input);
builder.setView(R.layout.userinput);
builder.setPositiveButton("OK",null);
builder.setNegativeButton("Cancel",null);
AlertDialog alertDialog = builder.create();
alertDialog.show();
Button saveWorkout = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
saveWorkout.setOnClickListener(new CustomClickListener(alertDialog));
builder.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
******最後編輯******* 因爲我已經完成了整個應用程序,我想我會後我的警告對話框代碼的情況下,它可以幫助別人了。事實證明,這個問題與警告對話是唯一的主要問題,一旦我習慣了android工作室和Java的東西真正起飛。反正我gymapp是使用SQLlite跟蹤訓練,演習,並設置一個可愛的小應用程序..其實我已經用它在健身房:)
@Override
//Clicking add workout button in the action bar
public boolean onOptionsItemSelected(MenuItem item) {
//Creating the dialog box for entering the workout name
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final EditText input = new EditText(this);
builder.setTitle("Enter the workout name").setView(input).setView(input);
builder.setPositiveButton("OK",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Workout workout = new Workout(input.getText().toString());
long workout_key = myDb.createWorkout(workout);
populateWorkouts();
}
});
builder.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
return super.onOptionsItemSelected(item);
}
就我而言,我使用輸入來創建一個鍛鍊對象並將其插入到我的數據庫中。顯然,如果您的操作欄菜單中有多個選項,則需要一個switch語句。
再次感謝2個試圖幫助我的人。
因此,所有我能看到的是你的方法是布爾和你正確地做了的EditText,但沒有回報反對。 – user7568042
您需要創建自己的自定義偵聽器來處理點擊! – Eenvincible