我正在使用自定義基礎適配器來實現customListView。 listView類(擴展ListView)在主活動中的鰭狀肢flipper.addView(mListView)內使用。EditText.SetText()更改自定義適配器中的我的軟鍵盤輸入類型
列表視圖有3種類型的行。 列表中的第一行是一個包含微調的行,接下來的兩行是帶有edittext的行,其中輸入了文本。第三行及其後的所有內容都與編輯文本中的數字相同。 我想這樣做,所以當我點擊文本版本時,softkeypad將只顯示文本,數字版本則顯示手機按鍵。
它們顯示正常,但是當你點擊一個編輯文本時,問題就出現了,softkeyboard在手機格式中彈出。 這是在getView()中設置的所有設置和值,但是當軟鍵盤以手機格式彈出時,getView()會再次被調用(邏輯),但只要它碰到文本類型EditTexts中的一個,鍵盤類型就會切換回文本輸入。在那之後,它不會輕易地轉變爲手機風格的顯示。該視圖似乎在跳,並努力專注於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>
對不起,延遲迴復,個人原因。我喜歡這個想法,我的列表長度不超過20行。但我忘了提及我動態構建它,因爲我有大約12個不同的列表視圖,每個列表視圖都有不同的佈局,所以我只是回收行。我在 – user960914 2012-03-02 09:13:57
下面發佈了另一個替代方案,見下面我在最後使用了ScrollView – user960914 2012-07-17 11:09:58