Android的如何使可编辑的EditText一个ListView内 [英] Android how to make EditText editable inside a ListView
问题描述
我有一个的ListView
,在每个项目编辑文本,我想知道我怎么可以让的EditText
编辑..这似乎做工精细如果我设置了安卓windowSoftInputMode =adjustPan
入清单,但只有在某些设备上。在某些设备上的软键盘覆盖的EditText。
在另一边,如果我不把安卓windowSoftInputMode =adjustPan
在清单中,的EditText
失去显示软键盘后,集中精力,我要触摸的EditText
多次,使其选中,就可以在里面写了。
请帮我解决这个问题。
注意:我已经看到了这个帖子:可调焦的EditText里面的ListView < /从那里>并没有什么帮助,我有比完全其它问题</ P>
我犯了一个解决方法这虽然..也许会帮助别人
公共类EditTextListAdapter扩展了BaseAdapter {
/ *笔记列表* /
私人的ArrayList&LT; SomeData&GT; mSomeData = NULL;
/ *布局充气实例* /
私人LayoutInflater mInflater;
/ *活动中* /
私人语境mContext;
/ *确保这个常数是大于最大列表大小* /
私有静态最终诠释DEFAULT_ID_VALUE = -1;
/ *用于保持笔记编辑文本行ID列表中* /
私人诠释mNoteId = DEFAULT_ID_VALUE;
/ **
* EditTextListAdapter适配器类的构造函数
*
* @参数范围内的活动范围内
* /
公共FirstTimesListAdapter(上下文的背景下){
/ *得到一个布局充气实例* /
mInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
/ *加载数据* /
mSomeData = SomeData.instance()的getData()。
/ *保持中* /
mContext =背景;
}
/ **
*返回选择的项
*
* @返回所选项目
* /
公众诠释getSelectedItem(){
返回mSelectedItem;
}
公众诠释getCount将(){
返回mSomeData.size();
}
公共对象的getItem(int i)以{
返回mSomeData.get(ⅰ);
}
众长getItemId(int i)以{
返回我;
}
公共查看getView(最终诠释索引,视图recycledView,ViewGroup中的ViewGroup){
ViewHolder viewHolder;
如果(recycledView == NULL){
/ *膨胀的列表项* /
recycledView = mInflater.inflate(R.layout.listview_item_with_edit_text,ViewGroup中,假);
/ *获取链接到视图持有人的看法* /
viewHolder =新ViewHolder();
viewHolder.note =(EditText上)recycledView.findViewById(R.id.first_times_note);
recycledView.setTag(viewHolder);
} 其他 {
/ *重复使用相同的看法,我们加载在第一时间* /
viewHolder =(ViewHolder)recycledView.getTag();
}
/ *显示一些注意事项* /
viewHolder.note.setText(mSomeData.getNotes());
/ *如果最后ID设置,从这个列表项目的编辑文本是pressed * /
如果(mNoteId ==指数){
/ *使编辑文本recive焦点* /
viewHolder.note.requestFocusFromTouch();
/ *使编辑文本的光标出现在文本的末尾* /
viewHolder.note.setSelection(viewHolder.note.getText()长度());
/ *重置最后一个ID为默认值* /
mNoteId = DEFAULT_ID_VALUE;
}
/ *设置上编辑文本触摸监听器只是为了记录这是pressed编辑文本的索引* /
viewHolder.note.setOnTouchListener(新View.OnTouchListener(){
公共布尔onTouch(查看视图,MotionEvent motionEvent){
如果(motionEvent.getAction()== MotionEvent.ACTION_UP){
/ *获得感动列表项的索引* /
mNoteId =指数;
}
返回false;
}
});
返回recycledView;
}
静态类ViewHolder {
/ *注输入* /
的EditText笔记;
}
}
I have a ListView
with edit text in each items and I want to know how can I make the EditText
editable.. It seems to work fine if I set the android:windowSoftInputMode="adjustPan"
into the manifest but only on some devices. On some devices the soft keyboard covers the edittext.
On the other side, if I don't put android:windowSoftInputMode="adjustPan"
in the manifest, the EditText
looses focus after the soft keyboard is displayed and I have to touch the EditText
multiple times to make it selected and can write in it.
Please help me solve this.
Note: I've seen this post: Focusable EditText inside ListView and nothing helped from there and I have totally other problem than that
I made a workaround for this though.. maybe will help someone
public class EditTextListAdapter extends BaseAdapter {
/* notes list */
private ArrayList<SomeData> mSomeData = null;
/* layout inflater instance */
private LayoutInflater mInflater;
/* activity context */
private Context mContext;
/* ensure that this constant is greater than the maximum list size */
private static final int DEFAULT_ID_VALUE = -1;
/* used to keep the note edit text row id within the list */
private int mNoteId = DEFAULT_ID_VALUE;
/**
* EditTextListAdapter adapter class constructor
*
* @param context activity context
*/
public FirstTimesListAdapter(Context context) {
/* get a layout inflater instance */
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
/* load the data */
mSomeData = SomeData.instance().getData();
/* keep the context */
mContext = context;
}
/**
* Returns the selected item
*
* @return selected item
*/
public int getSelectedItem() {
return mSelectedItem;
}
public int getCount() {
return mSomeData.size();
}
public Object getItem(int i) {
return mSomeData.get(i);
}
public long getItemId(int i) {
return i;
}
public View getView(final int index, View recycledView, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (recycledView == null) {
/* inflate the list item */
recycledView = mInflater.inflate(R.layout.listview_item_with_edit_text, viewGroup, false);
/* get link to the view holder views */
viewHolder = new ViewHolder();
viewHolder.note = (EditText) recycledView.findViewById(R.id.first_times_note);
recycledView.setTag(viewHolder);
} else {
/* reuse the same views we load the first time */
viewHolder = (ViewHolder) recycledView.getTag();
}
/* display some notes */
viewHolder.note.setText(mSomeData.getNotes());
/* if the last id is set, the edit text from this list item was pressed */
if (mNoteId == index) {
/* make the edit text recive focus */
viewHolder.note.requestFocusFromTouch();
/* make the edit text's cursor to appear at the end of the text */
viewHolder.note.setSelection(viewHolder.note.getText().length());
/* reset the last id to default value */
mNoteId = DEFAULT_ID_VALUE;
}
/* set a touch listener on the edit text just to record the index of the edit text that was pressed */
viewHolder.note.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
/* get the index of the touched list item */
mNoteId = index;
}
return false;
}
});
return recycledView;
}
static class ViewHolder {
/* note input */
EditText note;
}
}
这篇关于Android的如何使可编辑的EditText一个ListView内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!