<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.mytestdemo.MainActivity" > <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/item_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="20dp" android:paddingBottom="20dp" android:orientation="horizontal" > <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:layout_height="50dp"/> <EditText android:id="@+id/edit_text" android:layout_gravity="center_vertical" android:layout_marginLeft="30dp" android:layout_width="match_parent" android:layout_height="100dp" android:gravity="top" android:padding="5dp" android:background="@drawable/shape_edittext"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#FFFFFFFF"/> <stroke android:width="1dp" android:color="#000000"/> <corners android:radius="5dp"/> </shape>
public class MainActivity extends Activity {
private static final String TAG = "zbw";
private static final int DATA_CAPACITY = 20;
private ListView mListView;
private List<String> mList = new ArrayList<String>(DATA_CAPACITY);
private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list_view);
//填充数据
for(int i = 0; i < DATA_CAPACITY; i++) {
mList.add("" + i);
}
//设置Adapter
mAdapter = new MyAdapter(this, mList);
mListView.setAdapter(mAdapter);
}
}
public class MyAdapter extends BaseAdapter {
private ViewHolder mViewHolder;
private LayoutInflater mLayoutInflater;
private List<String> mList;
public MyAdapter(Context context, List<String> list) {
mLayoutInflater = LayoutInflater.from(context);
mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
mViewHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.edittext_item, null);
mViewHolder.mTextView = (TextView) convertView.findViewById(R.id.text_view);
mViewHolder.mEditText = (EditText) convertView.findViewById(R.id.edit_text);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
if (position <= 9) {
mViewHolder.mTextView.setText("0" + (position));
} else {
mViewHolder.mTextView.setText("" + (position));
}
mViewHolder.mEditText.setText(mList.get(position));
return convertView;
}
static final class ViewHolder {
TextView mTextView;
EditText mEditText;
}
}
//定义成员变量mTouchItemPosition,用来记录手指触摸的EditText的位置
private int mTouchItemPosition = -1;
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
mViewHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.edittext_item, null);
mViewHolder.mTextView = (TextView) convertView.findViewById(R.id.text_view);
mViewHolder.mEditText = (EditText) convertView.findViewById(R.id.edit_text);
mViewHolder.mEditText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
//注意,此处必须使用getTag的方式,不能将position定义为final,写成mTouchItemPosition = position
mTouchItemPosition = (Integer) view.getTag();
return false;
}
});
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
if (position <= 9) {
mViewHolder.mTextView.setText("0" + (position));
} else {
mViewHolder.mTextView.setText("" + (position));
}
mViewHolder.mEditText.setText(mList.get(position));
mViewHolder.mEditText.setTag(position);
if (mTouchItemPosition == position) {
mViewHolder.mEditText.requestFocus();
mViewHolder.mEditText.setSelection(mViewHolder.mEditText.getText().length());
} else {
mViewHolder.mEditText.clearFocus();
}
return convertView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
mViewHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.edittext_item, null);
mViewHolder.mTextView = (TextView) convertView.findViewById(R.id.text_view);
mViewHolder.mEditText = (EditText) convertView.findViewById(R.id.edit_text);
mViewHolder.mEditText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
//注意,此处必须使用getTag的方式,不能将position定义为final,写成mTouchItemPosition = position
mTouchItemPosition = (Integer) view.getTag();
return false;
}
});
// 让ViewHolder持有一个TextWathcer,动态更新position来防治数据错乱;不能将position定义成final直接使用,必须动态更新
mViewHolder.mTextWatcher = new MyTextWatcher();
mViewHolder.mEditText.addTextChangedListener(mViewHolder.mTextWatcher);
mViewHolder.updatePosition(position);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
//动态更新TextWathcer的position
mViewHolder.updatePosition(position);
}
if (position <= 9) {
mViewHolder.mTextView.setText("0" + (position));
} else {
mViewHolder.mTextView.setText("" + (position));
}
mViewHolder.mEditText.setText(mList.get(position));
mViewHolder.mEditText.setTag(position);
if (mTouchItemPosition == position) {
mViewHolder.mEditText.requestFocus();
mViewHolder.mEditText.setSelection(mViewHolder.mEditText.getText().length());
} else {
mViewHolder.mEditText.clearFocus();
}
return convertView;
}
static final class ViewHolder {
TextView mTextView;
EditText mEditText;
MyTextWatcher mTextWatcher;
//动态更新TextWathcer的position
public void updatePosition(int position) {
mTextWatcher.updatePosition(position);
}
}
class MyTextWatcher implements TextWatcher {
//由于TextWatcher的afterTextChanged中拿不到对应的position值,所以自己创建一个子类
private int mPosition;
public void updatePosition(int position) {
mPosition = position;
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
mList.set(mPosition, s.toString());
}
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
mViewHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.edittext_item, null);
mViewHolder.mTextView = (TextView) convertView.findViewById(R.id.text_view);
mViewHolder.mEditText = (EditText) convertView.findViewById(R.id.edit_text);
mViewHolder.mEditText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
//注意,此处必须使用getTag的方式,不能将position定义为final,写成mTouchItemPosition = position
mTouchItemPosition = (Integer) view.getTag();
//触摸的是EditText并且当前EditText可以滚动则将事件交给EditText处理;否则将事件交由其父类处理
if ((view.getId() == R.id.edit_text && canVerticalScroll((EditText)view))) {
view.getParent().requestDisallowInterceptTouchEvent(true);
if (event.getAction() == MotionEvent.ACTION_UP) {
view.getParent().requestDisallowInterceptTouchEvent(false);
}
}
return false;
}
});
// 让ViewHolder持有一个TextWathcer,动态更新position来防治数据错乱;不能将position定义成final直接使用,必须动态更新
mViewHolder.mTextWatcher = new MyTextWatcher();
mViewHolder.mEditText.addTextChangedListener(mViewHolder.mTextWatcher);
mViewHolder.updatePosition(position);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
//动态更新TextWathcer的position
mViewHolder.updatePosition(position);
}
if (position <= 9) {
mViewHolder.mTextView.setText("0" + (position));
} else {
mViewHolder.mTextView.setText("" + (position));
}
mViewHolder.mEditText.setText(mList.get(position));
mViewHolder.mEditText.setTag(position);
if (mTouchItemPosition == position) {
mViewHolder.mEditText.requestFocus();
mViewHolder.mEditText.setSelection(mViewHolder.mEditText.getText().length());
} else {
mViewHolder.mEditText.clearFocus();
}
return convertView;
}
/**
* EditText竖直方向是否可以滚动
* @param editText 需要判断的EditText
* @return true:可以滚动 false:不可以滚动
*/
private boolean canVerticalScroll(EditText editText) {
//滚动的距离
int scrollY = editText.getScrollY();
//控件内容的总高度
int scrollRange = editText.getLayout().getHeight();
//控件实际显示的高度
int scrollExtent = editText.getHeight() - editText.getCompoundPaddingTop() -editText.getCompoundPaddingBottom();
//控件内容总高度与实际显示高度的差值
int scrollDifference = scrollRange - scrollExtent;
if(scrollDifference == 0) {
return false;
}
return (scrollY > 0) || (scrollY < scrollDifference - 1);
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有