Android Studioでジムアプリを作成していますが、実装しようとしている最初の機能は、アクションバーのオプションをクリックして追加することでユーザーにトレーニングを作成させることです。このボタンをクリックすると、ワークアウト名を入力するためのEditTextフィールドがあるアラートダイアログが表示されます。後で、入力を使用して、異なるワークアウトが追加されたリストビューを作成しますが、今のところ、このEditTextフィールドからの入力をキャプチャすることが心配です。アクションバーメニューからのユーザー入力の取得
ここではどうなるのですか?this screen私は+ボタンをクリックすると、EditTextフィールドの警告ダイアログボックスが表示されます。私はこのinputをjavaのメインアクティビティファイルに取り込みたいと思います。
ここには、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);
}
}
}
は、ワークアウトの名前を追加するための私のアクションバーのメニュー項目(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>
最終、のEditTextのためのXML(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>
ためのXMLです
コードをデバッグするとき、EditTextフィールドにワークアウト名を入力すると、m_Text変数は常に空です。私はこれに数日間執着していました。私はYouTubeとSOを答えて梳きましたが、私の問題に関してはあまり見当たりませんでした。 洞察力があれば幸いです。ありがとうございました。
EDIT: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);
}
}
}
****** FINAL EDIT ******* 私は以来、全体のアプリを終了し、それが他の誰かを助け場合、私は私の警告ダイアログコードをポストだろうと思ってきました。私は、スタジオと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人のメンバーに感謝します。ここで
を解きだからあなたのコードの中であなたがm_textからデータをretreivingていると言う場合は、私が見ることができるすべては、あなたの方法はbooleanですされていない、あなたは正しくのEditTextをしましたが、ノーリターンオブジェクトを戻す。 – user7568042
クリックを処理するには、独自のカスタムリスナーを作成する必要があります。 – Eenvincible