【发布时间】:2012-03-17 01:37:35
【问题描述】:
我正在使用自定义基础适配器来实现 customListView。 listView 类(扩展 ListView)在主 Activity 中的 Flipper 中使用 flipper.addView(mListView)。
列表视图有 3 种类型的行。
列表中的第一个是带有微调器的行,接下来的 2 个是带有输入文本的 edittext 行。第 3 行及以后的行与包含数字的编辑文本相同。
我想这样做,以便当我单击文本版本时,软键盘将仅显示文本,而对于数字版本,则显示电话键盘。
它们显示正常,但是当您单击编辑文本时出现问题,软键盘以电话格式弹出。
它是在 getView() 中设置的所有设置和值,但是当以电话格式弹出软键盘时,getView() 会再次被调用(逻辑),但是一旦它击中文本类型 EditTexts 的 1,键盘类型就会切换回文本输入.之后它就不能轻易地转回手机风格的显示。该视图似乎在跳跃并努力专注于我想要的 EditText
我真的迷路了,无法弄清楚。
以下是 2 个主要代码。
public class MethodEditorAdapter extends BaseAdapter{
private Context context;
private ArrayList<String[]> scanparam;
private LayoutInflater mInflater;
public MethodEditorAdapter(Context context, ArrayList<String[]> scanparam ) {
super();
this.scanparam = scanparam;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public long getItemId(int position) {
int i = 0;
if(position == 0) i = 0;
if(position ==1) i = 1;
if(position == 2)i = 1;
if (position > 2)i = 2;
return i;
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
int i = 0;
if(position == 0) i = 0;
if(position ==1) i = 1;
if(position == 2)i = 1;
if (position > 2)i = 2;
return i;
}
public View getView(int position, View convertView, ViewGroup parent) {
Formatnames(position);
View rowView = convertView;
ViewHolder holder = null;
int type = getItemViewType(position);
if (rowView == null ) {
holder = new ViewHolder();
switch (type) {
case 0:
rowView = mInflater.inflate(R.layout.method_editor_row_spin, null);
holder.paramname = (TextView) rowView.findViewById(R.id.techniquetag);
holder.techniquespinner = (Spinner) rowView.findViewById(R.id.techniquespinner);
break;
case 1:
rowView = mInflater.inflate(R.layout.method_editor_row_text, null);
holder.paramname = (TextView) rowView.findViewById(R.id.paramnameT);
holder.paramvalue = (EditText) rowView.findViewById(R.id.paramvalT);
break;
case 2:
rowView = mInflater.inflate(R.layout.method_editor_row_number, parent, false);
holder.paramnameNum = (TextView) rowView.findViewById(R.id.paramnameN);
holder.paramvalueNum = (EditText) rowView.findViewById(R.id.paramvalN);
break;
}
rowView.setTag(holder);
}else {
holder = (ViewHolder) rowView.getTag();
}
setSelectedPosition(position);
switch (type) {
case 0:
holder.paramname.setText(namestg + " " + nd);
holder.techniquespinner.setSelection(Integer.valueOf(scanparam.get(position)[1]));
break;
case 1:
holder.paramname.setText(namestg + " " + nd);
holder.paramvalue.setText(scanparam.get(position)[1]);
break;
case 2:
holder.paramnameNum.setText(namestg + " " + nd);
holder.paramvalueNum.setText(scanparam.get(position)[1]);
}
return rowView;
}
static class ViewHolder {
public TextView paramname;
public EditText paramvalue;
public Spinner techniquespinner;
public TextView paramnameNum;
public EditText paramvalueNum;
}
主视图
public class MethodEditorView extends ListView {
private ArrayList<String[]> thismethod = new ArrayList<String[]>();
public MethodEditorAdapter editorAdapter;
private ListView mListView;
private Context mContext;
public MethodEditorView(Context context, ArrayList<String[]> methodlist) {
super(context);
// TODO Auto-generated constructor stub
this.thismethod = methodlist;
mContext = context;enter code here
initview(context);
}
private void initview(Context context){
editorAdapter = new MethodEditorAdapter(context, thismethod );
this.setAdapter(editorAdapter);
}
}
xml,抱歉我无法正确插入。这是数字类型的。
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="fill_parent" android:id="@+id/methodrownumber">
<TextView android:layout_height="wrap_content" android:layout_weight="1" android:textSize="16sp" android:textStyle="bold" android:id="@+id/paramnameN" android:layout_width="fill_parent" android:padding="5dp"></TextView>
<EditText android:layout_height="wrap_content" android:layout_width="fill_parent" android:textSize="16sp" android:layout_weight="1" android:id="@+id/paramvalN" android:imeOptions="actionNext" android:inputType="phone" android:focusable="true" android:focusableInTouchMode="true" android:clickable="true"></EditText>
【问题讨论】:
标签: android listview android-edittext android-softkeyboard