整个实现的效果就是淘宝的提交订单页面,选择快递类型。上源码
1)系统在ListView绘制前,先调用getCount()方法来获取item的个数。之后每绘制一个item就会调用一次getView方法。
2)ListView显示的数据是适配器中传入的数据,所以要想更改item中某项的值,不能通过直接更改item中控件的值来实现,必须通过更改传入的数据的值来实现,因为重绘ListView时,也是调用getView方法,如果传入的数据没变,重绘会恢复原来的值。
3)改变传入的值后,记得调用notifyDataSetChanged()。
View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); dialog.setContentView(view1); TextView tv1=(TextView) view1.findViewById(R.id.tv1); tv1.setText("aaa");
否则无法实现。下面是错误的方式:
dialog.setContentView(R.layout.dialog); View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); TextView tv1=(TextView) view1.findViewById(R.id.tv1); tv1.setText("aaa");
public View getView(final int position, View convertView, ViewGroup parent) { // TODO 自动生成的方法存根 View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null); TextView tv=(TextView) view.findViewById(R.id.tv); tv.setText(strList.get(position)); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { <span style="white-space:pre"> </span> // TODO 自动生成的方法存根 final Dialog dialog=new Dialog(MainActivity.this); View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); dialog.setCancelable(true); dialog.setCanceledOnTouchOutside(true); dialog.setTitle("xuanze"); dialog.setContentView(view1); dialog.setContentView(R.layout.dialog); TextView tv1=(TextView) view1.findViewById(R.id.tv1); TextView tv2=(TextView) view1.findViewById(R.id.tv2); TextView tv3=(TextView) view1.findViewById(R.id.tv3); tv2.setText("aaa"); if(position==1){ tv1.setVisibility(View.GONE); } tv1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 strList.set(0, "111"); notifyDataSetChanged(); dialog.dismiss(); } }); tv2.setOnClickListener(new OnClickListener() { <span style="white-space:pre"> </span> @Override <span style="white-space:pre"> </span> public void onClick(View v) { // TODO 自动生成的方法存根 strList.set(1, "222"); notifyDataSetChanged(); dialog.dismiss(); } }); } }); return view; }