我有一个列表视图。最初我得到这样的行项目。
但是当我向下滚动时,在某些位置我得到了这个,
我不明白为什么会这样。这里我使用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);
}
}
});
}
答案 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 = "";