Android 没有显示键盘。我将 Adapter 与 Edittext indise AlertDialog 一起使用
Android dosen't show me keybord. I use Adapter with Edittext indise AlertDialog
AlertDialog 工作正常,它向我展示了我的适配器,但是当我单击我的适配器中的 EditText 时,键盘没有打开。
除此之外:
Log.d(LOG_TAG, "item:"+item)
onClickListener 内部不起作用。
public class AddProduct extends Activity implements OnClickListener {
String LOG_TAG;
Button fillFields;
ArrayList<String> someArray;
BoxAdapter boxAdapter;
@SuppressWarnings("deprecation")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newproduct);
fillFields=(Button)findViewById(R.id.fillFields);
fillFields.setOnClickListener(this);
someArray=new ArrayList<String>();
boxAdapter = new BoxAdapter(this, someArray);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.fillFields:
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Поля товара");
alert.setAdapter(boxAdapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Log.d(LOG_TAG, "item:"+item);
}});
alert.create().show();
break;
}
}
}
和适配器:
public class BoxAdapter extends BaseAdapter {
Context ctx;
LayoutInflater lInflater;
ArrayList<String> objects;
OnEditorActionListener myEditorActionListener;
String LOG_TAG;
EditText editText;
BoxAdapter(Context context, ArrayList<String> getFields){
ctx = context;
objects = getFields;
lInflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return objects.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return objects.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// используем созданные, но не используемые view
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.addproduct_item, parent, false);
}
((TextView) view.findViewById(R.id.addProductTextView)).setText(objects.get(position));
editText = (EditText) view.findViewById(R.id.addProductEditText);
return view;
}
}
所以,我做错了什么?谢谢。
好吧,你必须展示所有代码而不是部分代码,最好展示你的 logcat,
但是,要强制在对话框中显示键盘,您可以使用它(我不知道这是否是最好的方法,但是,这是一种方法):
YourDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
这取决于您如何获得对话框,但是,如果它使用 fragmentDialog 或方法(已弃用)onCreateDialog,您应该将对话框 var 声明为 final。
此致。
AlertDialog 工作正常,它向我展示了我的适配器,但是当我单击我的适配器中的 EditText 时,键盘没有打开。 除此之外:
Log.d(LOG_TAG, "item:"+item)
onClickListener 内部不起作用。
public class AddProduct extends Activity implements OnClickListener {
String LOG_TAG;
Button fillFields;
ArrayList<String> someArray;
BoxAdapter boxAdapter;
@SuppressWarnings("deprecation")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newproduct);
fillFields=(Button)findViewById(R.id.fillFields);
fillFields.setOnClickListener(this);
someArray=new ArrayList<String>();
boxAdapter = new BoxAdapter(this, someArray);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.fillFields:
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Поля товара");
alert.setAdapter(boxAdapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Log.d(LOG_TAG, "item:"+item);
}});
alert.create().show();
break;
}
}
}
和适配器:
public class BoxAdapter extends BaseAdapter {
Context ctx;
LayoutInflater lInflater;
ArrayList<String> objects;
OnEditorActionListener myEditorActionListener;
String LOG_TAG;
EditText editText;
BoxAdapter(Context context, ArrayList<String> getFields){
ctx = context;
objects = getFields;
lInflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return objects.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return objects.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// используем созданные, но не используемые view
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.addproduct_item, parent, false);
}
((TextView) view.findViewById(R.id.addProductTextView)).setText(objects.get(position));
editText = (EditText) view.findViewById(R.id.addProductEditText);
return view;
}
}
所以,我做错了什么?谢谢。
好吧,你必须展示所有代码而不是部分代码,最好展示你的 logcat,
但是,要强制在对话框中显示键盘,您可以使用它(我不知道这是否是最好的方法,但是,这是一种方法):
YourDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
这取决于您如何获得对话框,但是,如果它使用 fragmentDialog 或方法(已弃用)onCreateDialog,您应该将对话框 var 声明为 final。
此致。