Androidにおいて、ダイアログで入力されたデータを元のアクティビティに渡す方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
奥兵

Androidにおいて、ダイアログで入力されたデータを元のアクティビティに渡す方法

#1

投稿記事 by 奥兵 » 12年前

AndroidでEditTextを持ったダイアログを表示し、そこで入力された文字列を利用したいと思い を参考に下のコードを書いたのですが
元のMainActivityでDialog(strInput)で入力された値を利用する方法がわかりません。
思いつく方法は手当たり次第に試したのですが、どうもうまくいきません。どなたかアドバイスをお願いします。

コード:

public class MainActivity extends Activity {

	public static final int MENU_SAVE = 0;
	public static final int MENU_LOAD = 1;
	public static final int MENU_LIST =2;
	public static final int MENU_OPTION = 3;
	
	String fName;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
				
		setContentView(R.layout.activity_main);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu){
		
		menu.add(0, MENU_SAVE, 0, "SAVE").setIcon(android.R.drawable.ic_menu_save);	
		menu.add(0, MENU_LOAD, 0, "LOAD");
		menu.add(0, MENU_OPTION, 0, "OPTION");
		menu.add(0, MENU_LIST, 0, "LIST");
		
		return true;
	}
	
	public void onReturnValue(String value) {
		fName = value;
	}
	
	public String strInput(){
		
		final EditText editView = new EditText(MainActivity.this);
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("FILE NAME");
        builder.setView(editView);
        builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {

        	@Override
            public void onClick(DialogInterface dialog, int idx) {
       
        		String str = editView.getText().toString();//このstrを利用したい
        	
        	}
        	 
        });
        builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
        	@Override
            public void onClick(DialogInterface dialog, int whichButton) {
            }
        });
        builder.show();
		
		return null;
	}
	
	public boolean seve(String str){
		
		strInput();
		
		FileOutputStream fis = null;
        BufferedWriter out = null;

        EditText editText = (EditText)findViewById(R.id.editText1);

        // ファイルへの書き込み
        try {
                fis = this.openFileOutput("test.txt", 0);
                out = new BufferedWriter(new OutputStreamWriter(fis));
                out.write(editText.getText().toString());
                out.flush();

        } catch (IOException e) {
                e.printStackTrace();

        }finally {
                if(out != null) {
                        try {	
                                out.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }
		return true;
	}
	
	boolean load(){
	//略
		return true;
	}
	
	boolean list(){
		//略
		return true;
	}
	
	public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	    case MENU_SAVE:
	    	seve("tes");
	        Log.d("Menu","Select SAVE");
	        return true;
	 
	    case MENU_LOAD:
	    	load();
	        Log.d("Menu","Select LOAD");
	        return true;
	        
	    case MENU_LIST:
	    	list();
	        Log.d("Menu","Select LIST");
	        return true;
	        
	    case MENU_OPTION:
	        Log.d("Menu","Select OPTION");
	        return true;
	        
	    }
	    return false;
	}
	
}

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: Androidにおいて、ダイアログで入力されたデータを元のアクティビティに渡す方法

#2

投稿記事 by ISLe » 12年前

showメソッドを呼び出したあとに、editView変数からアクセスできるのでは?

奥兵

Re: Androidにおいて、ダイアログで入力されたデータを元のアクティビティに渡す方法

#3

投稿記事 by 奥兵 » 12年前

builder.show()の後ろでeditView.getText().toString()を入れてLog出力させてみたのですが、
出力されなかったのでどうやら処理が来てない感じがします。
onClick()の中からMainActivityも見えていないみたいでメッソッドの経由等も聞きません。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: Androidにおいて、ダイアログで入力されたデータを元のアクティビティに渡す方法

#4

投稿記事 by ISLe » 12年前

showメソッドでブロックしないので、seveメソッドはダイアログのボタンを押す前に書き出しに進んでしまいますね。

onClickの中からseveメソッドを呼び出す形にするのが良いのではないでしょうか。

奥兵

Re: Androidにおいて、ダイアログで入力されたデータを元のアクティビティに渡す方法

#5

投稿記事 by 奥兵 » 12年前

アドバイスありがとうございます。おかげ様で任意の名前で保存できました。ありがとうございます。
ステップとしてはAlertDialogクラスのonClickからMainActivityのsaveに直接はアクセスさせることが出来なかったので
AlertDialogの継承クラスを作って、それにMainActivityのインスタンスを渡してonClickからMainActivityのsaveを呼び出しました。
 

閉鎖

“C言語何でも質問掲示板” へ戻る