由于在适配器中不能直接监听修改输入框右下角监听现实剩余输入数字tv,所以要写一个回调
在Activity中修改tv
效果图:
项目结构:
代码:
MainActivity中 package android.zhh.com.testeditview; import android.app.Activity; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { // 列表 private ListView listview; // 适配器 private PersonAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化控件 listview = (ListView) findViewById(R.id.list_view_parent); // 绑定数据 adapter = new PersonAdapter(MainActivity.this, getListData()); listview.setAdapter(adapter); // 回调,改变剩余内容 adapter.setListener(new PersonAdapter.ChanggeTextListener() { @Override public void setText(View view, String text) { ((TextView) view.findViewById(R.id.tvNum)).setText(text); } }); } /** *造一组假数据,绑定适配器 */ public List<String> getListData() { List<String> listData = new ArrayList<String>(); for(int i = 0; i <5 ; i++) { listData.add("zhh"+i); } return listData; } }
适配器PersonAdapter中
package android.zhh.com.testeditview; import android.content.Context; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.TextView; import java.util.List; /** * Created by sky on 2017/3/13. */ class PersonAdapter extends BaseAdapter { ChanggeTextListener listener; private Context context; private List<String> listData; private ViewHolder holder; public PersonAdapter(Context context, List<String> listData) { super(); this.context = context; this.listData = listData; } // 回调,改变输入框剩余数字 public void setListener(ChanggeTextListener listener) { this.listener = listener; } public interface ChanggeTextListener{ void setText(View view,String text); } @Override public int getCount() { return listData.size(); } @Override public Object getItem(int position) { return listData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.list_parent_item, null); holder = new ViewHolder(); holder.item1 = (TextView) convertView.findViewById(R.id.item1); holder.etTest= (EditText) convertView.findViewById(R.id.etTest); holder.tvNum= (TextView) convertView.findViewById(R.id.tvNum); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.item1.setText(listData.get(position)); final View view=convertView; // 输入框监听事件 holder.etTest.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { listener.setText(view,editable.length()+"/400"); } }); return convertView; } class ViewHolder { // 绑定数据的控件 TextView item1; // 输入框 EditText etTest; // 输入框右下角的数字 TextView tvNum; } }
activity_main.xml中
<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=".MainActivity" > <ListView android:id="@+id/list_view_parent" android:layout_width="match_parent" android:layout_height="wrap_content" android:cacheColorHint="@android:color/transparent" android:listSelector="@android:color/transparent" /> </RelativeLayout>list_parent_item.xml中
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/item1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" /> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="100dp" > <EditText android:id="@+id/etTest" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="100dp" android:maxLength="400" android:paddingLeft="10dp" android:paddingTop="10dp" android:paddingRight="10dp" android:paddingBottom="30dp" android:layout_marginTop="0dp" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:background="#CCCCCC" android:gravity="top" android:hint="炫一下你的购物体验吧" android:textSize="15sp" android:textCursorDrawable="@null" /> <TextView android:id="@+id/tvNum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:layout_marginBottom="20dp" android:layout_marginRight="20dp" android:text="400" /> </RelativeLayout> </LinearLayout>更多用法:
https://blog.csdn.net/zhaihaohao1/article/details/90666071 源码下载:
http://download.csdn.net/detail/zhaihaohao1/9779421