Textview显示" Hello World"而不是文本集

时间:2014-09-15 12:08:19

标签: android android-listview

我有一个列表视图。最初我得到这样的行项目。

enter image description here 但是当我向下滚动时,在某些位置我得到了这个, enter image description here

我不明白为什么会这样。这里我使用TreeObserver获取firsttext视图的宽度,以获得firsttextview中显示的字符串长度,并将其余部分显示在其他视图中。

这是代码,我有两个布局膨胀,我发布了这个代码。

 if(type==0){

            if(convertView==null){

                convertView= inflater.inflate(R.layout.incoming_msg_row,parent, false);
                holder=new ViewHolder();
                holder.messageFirstPart = (TextView) convertView
                        .findViewById(R.id.messageFirstPart);
                holder.messageLeftPart = (TextView) convertView
                        .findViewById(R.id.messageLeftPart);

                holder.username= (TextView) convertView.findViewById(R.id.SendersName);

                holder.time=(TextView) convertView.findViewById(R.id.timestamp);
                holder.leftline=convertView.findViewById(R.id.leftline);
                holder.rightline=convertView.findViewById(R.id.rightline);

                holder.view3=convertView.findViewById(R.id.incoming_msg_row_innerlayout);

                convertView.setTag(holder);

            }
            else    
                holder = (ViewHolder) convertView.getTag();

            holder.messageFirstPart.setText(message[position]);
                holder.username.setText("John");
                holder.time.setText(timestamp[position]);


        RelativeLayout mineLayout= 
              (RelativeLayout)convertView.findViewById(R.id.incoming_msg_row_innerlayout);
                RelativeLayout.LayoutParams params=(LayoutParams) mineLayout.getLayoutParams();

                for(int i=0;i<x.length;i++){

                System.out.println(x[i]);
                if(position==x[i]){
                    holder.time.setVisibility(View.GONE);
                    holder.leftline.setVisibility(View.GONE);
                    holder.rightline.setVisibility(View.GONE);


                    params.topMargin=20;
    //                      holder.view3.requestLayout();
                    mineLayout.setLayoutParams(params);

                    break;
                }
                else{

                    holder.time.setVisibility(View.VISIBLE);
                    holder.leftline.setVisibility(View.VISIBLE);
                    holder.rightline.setVisibility(View.VISIBLE);
   //                       params.topMargin+=0;
   //                       holder.view3.requestLayout();
                    params.topMargin=90;
                    mineLayout.setLayoutParams(params);

                }
            }

            if(position==0){
                holder.time.setVisibility(View.VISIBLE);
                holder.leftline.setVisibility(View.VISIBLE);
                holder.rightline.setVisibility(View.VISIBLE);
                params.topMargin=90;
                mineLayout.setLayoutParams(params);
            }

                holder.messageFirstPart.getViewTreeObserver().addOnGlobalLayoutListener(
                        new OnGlobalLayoutListener() {

                            @SuppressWarnings("deprecation")
                            @SuppressLint("NewApi")
                            @Override
                            public void onGlobalLayout() {
                                // TODO Auto-generated method stub

                                width = holder.messageFirstPart.getWidth();
                                int totalCharstoFit;

                                String chat = holder.messageFirstPart.getText().toString();

                                String substring=null,substringtwo=null;
                                totalCharstoFit =  

                          holder.messageFirstPart.getPaint().breakText(chat, 0,
                                            chat.length(), true, width, null);
                                            substring = chat.substring(0, totalCharstoFit);
                                            substringtwo = chat.substring(substring.length(),
                                                    chat.length());

                                            holder.messageFirstPart.setText(chat);
                                            holder.messageLeftPart.setText(substringtwo);


                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                                    holder.messageFirstPart.getViewTreeObserver()
                                            .removeOnGlobalLayoutListener(this);
                                } else {
                                    holder.messageFirstPart.getViewTreeObserver()
                                            .removeGlobalOnLayoutListener(this);
                                }

                            }
                        }); 

            }

4 个答案:

答案 0 :(得分:1)

Hello world是在字符串或xml中为textview定义的常量文本。  检查xml是否已给出。 android:text =&#34; Hello world&#34;或者您在strings.xml中提到并在textview中使用它。机器人:文本=&#34; @串/你好&#34;如果你在字符串中提到过。

答案 1 :(得分:1)

Hello world通常是一种&#34;默认文字&#34;你创建了一个新项目,并且可能在xml中创建ListView行时,你离开了android:text字段设置了该字符串,并且因为ListView的回收系统您将获得默认文本。您可能忘记设置TextView

的文本

答案 2 :(得分:0)

尝试定义这样的适配器;

 ListView lv = (ListView) dialog.findViewById(R.id.lv);
                lv.refreshDrawableState();
                AdapterClass adapter = new AdapterClass (context, R.layout.row, adpArray);

                try {
                    adapter.setNotifyOnChange(true);
                    adapter.notifyDataSetChanged();
                } catch (Exception e) {
                    // TODO: handle exception
                }

                lv.invalidate();
                lv.setAdapter(adapter);
                lv.invalidate();

答案 3 :(得分:0)

  

yaa ..默认文本是HEllo world .. bt将其删除..制作文字   在hello world即将来临的那些位置查看null。

确定。所以我想这可能是由于&#34; substringtwo&#34;对象返回null。你能试试吗

holder.messageLeftPart.setText(substringtwo);

下面的if block

//Check for not string object null and non empty and not containing string value null
if(!TextUtils.isEmpty(substringtwo) && !substringtwo.equalsIgnoreCase("null")) {
    //set message text here
}

OR

尝试将变量substringtwo初始化为空字符串,即String substringtwo = "";