Android SetText()更改自定义适配器中的软键盘输入类型

Android SetText()更改自定义适配器中的软键盘输入类型,android,listview,android-edittext,android-softkeyboard,Android,Listview,Android Edittext,Android Softkeyboard,我正在使用自定义基本适配器来实现customListView。listView类(扩展listView)在主活动中的flipper flipper.addView(mListView)中使用 列表视图有3种类型的行。 列表中的第一行是带有微调器的行,接下来的两行是带有edittext的行,其中输入了文本。第三行和第三行之后的文本都是相同的,其中包含数字。 我想这样做,当我点击文本版本时,软键盘将只显示文本,数字版本则显示手机键盘。 它们显示ok,但当你点击编辑文本时,问题就出现了,软键盘会以手机

我正在使用自定义基本适配器来实现customListView。listView类(扩展listView)在主活动中的flipper flipper.addView(mListView)中使用

列表视图有3种类型的行。 列表中的第一行是带有微调器的行,接下来的两行是带有edittext的行,其中输入了文本。第三行和第三行之后的文本都是相同的,其中包含数字。 我想这样做,当我点击文本版本时,软键盘将只显示文本,数字版本则显示手机键盘。
它们显示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);