Android 台灣中文網
標題:
EditText在AlertDiag裡面取得不到使用者輸入的值?
[打印本頁]
作者:
b770428
時間:
2017-9-1 16:20
標題:
EditText在AlertDiag裡面取得不到使用者輸入的值?
本帖最後由 b770428 於 2017-9-1 16:55 編輯
先講一下我的目的
是想要建立一個可以讓使用者自行輸入資料表 欄位名稱 以及資料內容的app
而底下的程式碼只是一部分目前的一部分
這個部分的目的是要讓使用者點選側邊欄的按鈕之後,出現一個AlertDialog對話視窗
在AlertDialog或對話視窗裡面加入多數個EditText,並在使用者按下對話框的check按鈕之後取得多數個使用者輸入的值
,不過本代碼先以兩個EditText的時候試試看,發現不管使用者輸入什麼值取得的都是""
不知道到底是為什麼??
手機App畫面是這個樣子
上圖兩個EditText輸入值之後用getText()取到的值經過測試以後發現都是"" 取不到使用者實際輸入的值....
package com.example.sca;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ContentProviderOperation.Builder;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Adapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class MainActivity extends Activity {
public static int id;
public static ListView lv;
public static SimpleCursorAdapter sca;
public static LinearLayout ll;
public static String test="tes";
public static AlertDialog alertdialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.lv=new ListView(this);
this.ll=(LinearLayout)findViewById(R.id.LinearLayout1);
SQLiteDatabase MyDB=openOrCreateDatabase("MyDB",Context.MODE_PRIVATE,null);
String createTable="CREATE TABLE IF NOT EXISTS list(_id VARCHAR(32),name VARCHAR(64))";
MyDB.execSQL(createTable);
Cursor cs=MyDB.query("list", null, null, null, null, null, null);
cs.moveToFirst();
if (cs.getCount()==0){
id++;
ContentValues cv=new ContentValues();
cv.put("_id", id);
cv.put("name", "Lin");
MyDB.insert("list", null, cv);
ContentValues cv2=new ContentValues();
id++;
cv2.put("_id", id);
cv2.put("name", "WANG");
MyDB.insert("list", null, cv2);
cs=MyDB.query("list", null, null, null, null, null, null);
}
String[] Columns={"name"};
int[] View_ids={R.id.TextView1};
ListView lv=new ListView(this);
lv.setAdapter(sca);
this. sca=new SimpleCursorAdapter(this,R.layout.activity_main,cs,Columns,View_ids);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
alertdialog=new AlertDialog.Builder(this)
.setAdapter(sca, null)
.create();
alertdialog
.setButton("check", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
alertdialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE ,WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
test=((EditText)((LinearLayout)sca.getView(1, ll, lv)).getChildAt(1)).getText().toString();
TextView tv3=new TextView(MainActivity.this);
ll.addView(tv3);
tv3.setText(test);
}
});
alertdialog.show();
alertdialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
TextView tv2=new TextView(this);
ll.addView(tv2);
tv2.setText(this.test);
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
複製代碼
下面是我主頁的
XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.sca.MainActivity" >
<TextView
android:id="@+id/TextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
複製代碼
作者:
b770428
時間:
2017-9-1 16:41
圖片上傳好像失敗 沒辦法上傳...
作者:
muska1116
時間:
2017-10-23 23:32
本帖最後由 muska1116 於 2017-10-23 23:39 編輯
因為 ((EditText)((LinearLayout)sca.getView(1, ll, lv)).getChildAt(1)) 抓到的是你主畫面
setContentView(R.layout.activity_main) 裡面的 EditText,而不是 AlertDialog 裡面的...
不過使用了這麼多的 static... 嗯… 蠻特別的...
如果 AlertDialog 比較複雜可以考慮使用官方推薦的 DialogFragment...
歡迎光臨 Android 台灣中文網 (https://apk.tw/)
Powered by Discuz! X3.1