该方法正在listview中应用错误的元素

时间:2014-11-06 16:06:06

标签: java android listview android-listview custom-adapter

我对listview有疑问。列表视图的每个项目都有一个imageview和一个textview。我为Listview适配器扩展了BaseAdapter类,并覆盖了一些我必须覆盖的方法。顺便说一下,如果大于25,我想缩小textview中文本的大小。为此,我创建了一个名为“shrinkText()”的方法。当我第一次执行应用程序时,此方法可以正常工作。因此,文本视图大小超过25的文本视图已缩小,其他文本视图保持其大小。但是,当我在列表视图中删除时,文本视图的文本大小小于25也已缩小。我该怎么做才能解决这个问题?谢谢

我的listview适配器......

 public class ListAdapter extends BaseAdapter{


      private final ProgramInfo values;
      private LayoutInflater mInflater;

       public ListAdapter(Context context, ProgramInfo values) {

        this.values = values;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      }

       @Override
       public int getCount(){

           return values.getSize();
    }
       @Override
       public Object getItem(int position) {

        return null;
    }

       @Override
       public long getItemId(int position) {

        return 0;
    }

       @Override
       public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder viewHolder; 

            if (convertView == null) {

                convertView = mInflater.inflate(R.layout.brd_stream_list_item,parent,false);

                viewHolder = new ViewHolder();

                viewHolder.p_Name = (TextView)convertView.findViewById(R.id.prgName);
                viewHolder.p_Image = (ImageView)convertView.findViewById(R.id.prgImage);

                convertView.setTag(viewHolder);

            }else{

                viewHolder = (ViewHolder) convertView.getTag();
            }

            viewHolder.p_Name.setText(values.programNames.get(position));
            viewHolder.p_Image.setImageResource(R.drawable.alarm_clock_ed);


           CharSequence text = viewHolder.p_Name.getText(); 
           shrinkText(text,viewHolder.p_Name); //Call for shrink

         }

我的shrinkText()方法..

private void shrinkText(CharSequence text, TextView v){

if(text.length()>25){

    v.setTextSize(TypedValue.COMPLEX_UNIT_SP, 11);

    }
}

1 个答案:

答案 0 :(得分:0)

您需要添加else语句:

private void shrinkText(CharSequence text, TextView v){

if(text.length()>25){

    v.setTextSize(TypedValue.COMPLEX_UNIT_SP, 11);

    }
else {
   v.setTextSize(TypedValue.COMPLEX_UNIT_SP, 25); //the default text size
}
}

提示:为避免错误,请始终在if-else中使用getView语句(不仅仅是if)。