Android SetText()更改自定义适配器中的软键盘输入类型
我正在使用自定义基本适配器来实现customListView。listView类(扩展listView)在主活动中的flipper flipper.addView(mListView)中使用 列表视图有3种类型的行。 列表中的第一行是带有微调器的行,接下来的两行是带有edittext的行,其中输入了文本。第三行和第三行之后的文本都是相同的,其中包含数字。 我想这样做,当我点击文本版本时,软键盘将只显示文本,数字版本则显示手机键盘。Android SetText()更改自定义适配器中的软键盘输入类型,android,listview,android-edittext,android-softkeyboard,Android,Listview,Android Edittext,Android Softkeyboard,我正在使用自定义基本适配器来实现customListView。listView类(扩展listView)在主活动中的flipper flipper.addView(mListView)中使用 列表视图有3种类型的行。 列表中的第一行是带有微调器的行,接下来的两行是带有edittext的行,其中输入了文本。第三行和第三行之后的文本都是相同的,其中包含数字。 我想这样做,当我点击文本版本时,软键盘将只显示文本,数字版本则显示手机键盘。 它们显示ok,但当你点击编辑文本时,问题就出现了,软键盘会以手机
它们显示ok,但当你点击编辑文本时,问题就出现了,软键盘会以手机格式弹出。 这是getView()中的所有设置和值设置,但当软键盘以电话格式弹出时,getView()会再次被调用(逻辑),但一旦它点击文本类型EditText中的一个,键盘类型就会切换回文本输入。在那之后,它将很难被转换回手机风格的显示器。视图似乎在跳来跳去,努力聚焦于我想要的编辑文本 我在这里真的迷路了,弄不明白这是怎么回事。 下面是两个主要的代码位
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;
}
公共类MethodEditorAdapter扩展BaseAdapter{
私人语境;
私有ArrayList scanparam;
私人停车场;
公共方法编辑器适配器(上下文,ArrayList scanparam){
超级();
this.scanparam=scanparam;
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
}
@凌驾
公共长getItemId(int位置){
int i=0;
如果(位置==0)i=0;
如果(位置==1)i=1;
如果(位置==2)i=1;
如果(位置>2)i=2;
返回i;
}
@凌驾
public int getViewTypeCount(){
返回3;
}
@凌驾
public int getItemViewType(int位置){
int i=0;
如果(位置==0)i=0;
如果(位置==1)i=1;
如果(位置==2)i=1;
如果(位置>2)i=2;
返回i;
}
公共视图getView(int位置、视图转换视图、视图组父级){
姓名(职位);
视图行视图=转换视图;
ViewHolder=null;
int type=getItemViewType(位置);
if(rowView==null){
holder=新的ViewHolder();
开关(类型){
案例0:
rowView=mInflater.flate(R.layout.method\u editor\u row\u spin,null);
holder.paramname=(TextView)rowView.findViewById(R.id.techniquetag);
holder.techniquespinner=(Spinner)rowView.findViewById(R.id.techniquespinner);
打破
案例1:
rowView=mInflater.flate(R.layout.method\u editor\u row\u text,null);
holder.paramname=(TextView)rowView.findViewById(R.id.paramname);
holder.paramvalue=(EditText)rowView.findViewById(R.id.paramvalT);
打破
案例2:
rowView=mInflater.flate(R.layout.method\u editor\u row\u number,parent,false);
holder.paramnameNum=(TextView)rowView.findViewById(R.id.paramnameN);
holder.paramvalueNum=(EditText)rowView.findViewById(R.id.paramvalN);
打破
}
rowView.setTag(支架);
}否则{
holder=(ViewHolder)rowView.getTag();
}
设置所选位置(位置);
开关(类型){
案例0:
holder.paramname.setText(namestg+“”+nd);
holder.techniquespinner.setSelection(Integer.valueOf(scanparam.get(position)[1]);
打破
案例1:
holder.paramname.setText(namestg+“”+nd);
holder.paramvalue.setText(scanparam.get(position)[1]);
打破
案例2:
holder.paramnameNum.setText(namestg+“”+nd);
holder.paramvalueNum.setText(scanparam.get(position)[1]);
}
返回行视图;
}
静态类视窗夹{
公共文本视图参数名;
公共价值;
公共旋转器技术旋转器;
公共文本视图paramnameNum;
公共编辑文本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);
}
公共类MethodEditorView扩展了ListView{
private ArrayList thismethod=new ArrayList();
公共方法编辑器适配器编辑器适配器;
私有列表视图;
私有上下文;
公共方法编辑器视图(上下文,ArrayList方法列表){
超级(上下文);
//TODO自动生成的构造函数存根
this.thismethod=methodlist;
mContext=context;在此处输入代码
initview(上下文);
}
私有void initview(上下文){
editorAdapter=新方法editorAdapter(上下文,thismethod);
这个.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>
让我为您的listview中的edittext省去很多麻烦。不要这样做。我花了一个多星期的时间试图让listview中的edittext不循环使用输入,以确保在恢复时正确的输入位于正确的字段中。我建议您创建一个滚动视图,其中的表格布局与列表视图类似e天。只要你没有太多的行,它就可以正常运行。现在假设你有100行,那就不好看了
public class inputpage extends Activity implements OnClickListener{
public TableLayout tl;
static Map<Integer, String> inputValues = new LinkedHashMap<Integer, String>();
private dbadapter mydbhelper;
public static int editCount;
private PopupWindow pw;
public Cursor cursor;
private ArrayList<EditText> m_edit = new ArrayList<EditText>();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mydbhelper = new dbadapter(this);
mydbhelper.open();
setContentView(R.layout.tablelayout);
tl=(TableLayout) this.findViewById(R.id.table);
getCursor();
editCount = cursor.getCount();
buildRow();
View footer = getLayoutInflater().inflate(R.layout.footer_layout, null);
tl.addView(footer);
}
//This lets me get a cursor so I can settext on my textviews
public void getCursor(){
if(main.quickStart == "Cate"){
cursor = mydbhelper.getUserWord();
}...
//add my rows in a loop based off how many items my cursor brought back
public void buildRow(){
//params for my different items
LayoutParams textparam = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT, .30f);
LayoutParams editparam = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT, .70f);
textparam.setMargins(2, 2, 2, 2);
editparam.setMargins(2, 2, 2, 2);
editparam.gravity=17;
LayoutParams rowparam = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
cursor.moveToFirst(); //make sure cursor starts at beginning
for (int i = 0; i < editCount; i++){
TableRow tr = new TableRow(this);
tr.setLayoutParams(rowparam);
//textview
TextView tv=new TextView(this);
tv.setLayoutParams(textparam);
tv.setText(cursor.getString(cursor.getColumnIndex("userword")));
tv.setTextSize(35f);
tv.setGravity(Gravity.CENTER);
tv.setWidth(175);
tv.setTextColor(getResources().getColor(R.color.black));
tr.addView(tv);
//edittext
EditText edit = new EditText(this);
edit.setLayoutParams(editparam);
tr.addView(edit);
edit.setGravity(Gravity.LEFT);
edit.setId(editCount);
m_edit.add(i, edit);
edit.setText("");
cursor.moveToNext();
tl.addView(tr, new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
}}
公共类inputpage扩展活动实现OnClickListener{
公共桌面布局;
静态映射inputValues=新LinkedHashMap();
私有数据库适配器mydbhelper;
公共静态整数编辑计数;
私人PopupWindow pw;
公共光标;
private ArrayList m_edit=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
mydbhelper=newdbadapter(this);
mydbhelper.open();
setContentView(R.layout.tablelayout);
tl=(TableLayout)this.findviewbyd(R.id.table);
getCursor();
editCount=cursor.getC
<activity android:name=".youractivity" android:windowSoftInputMode="adjustPan"/>
android:descendantFocusability="beforeDescendants"
mListView.setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS);