ページ 11

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

Posted: 2013年10月25日(金) 18:10
by 奥兵
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;
	}
	
}

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

Posted: 2013年10月25日(金) 19:04
by ISLe
showメソッドを呼び出したあとに、editView変数からアクセスできるのでは?

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

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

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

Posted: 2013年10月26日(土) 19:17
by ISLe
showメソッドでブロックしないので、seveメソッドはダイアログのボタンを押す前に書き出しに進んでしまいますね。

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

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

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