1

我正在尝试将 textview 动态添加到 listview 中。在添加我之前设置文本但在列表视图中的文本看起来像'android.widget.TextView@45f ...'

private ArrayAdapter<TextView> dizi;
private ListView list;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

list = (ListView)findViewById(R.id.listview);
dizi = new ArrayAdapter<TextView>(this, R.layout.asd);
list.setAdapter(dizi);

TextView qwe = new TextView(getApplicationContext());
qwe.setText("txt");
dizi.add(qwe);

} 

asd 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:padding="5dp"

/>

我尝试在 asd 布局文件中使用 linearlayout 更改 textview 元素,但它没有用。

我想不通。我需要做什么?

谢谢..

4

1 回答 1

3

这是因为对它所持有的对象的正常ArrayAdapter调用实现toString()可以确保它们可以显示。

由于ArrayAdapter已经使用TextViews 来显示数据,我建议您将 Adapter 更改为ArrayAdapter<String>,然后添加您要显示的字符串。

dizi = new ArrayAdapter<String>(this, R.layout.asd);
list.setAdapter(dizi);

dizi.add("txt");
dizi.notifyDataSetChanged();

如果要更改布局,请扩展ArrayAdapter并覆盖该getView()方法。本教程更深入一些。

ArrayAdapter由 a Listof Strings 实现 some s的小例子Spannable

public class ExampleAdapter extends ArrayAdapter<String> {

  LayoutInflater inflater;
  int resId;
  int layoutId;

  public ExampleAdapter(Context context,int layoutId, int textViewResourceId,
                        List<String> objects) {
    super(context, layoutId, textViewResourceId, objects);
    this.inflater = LayoutInflater.from(context);
    this.layoutId = layoutId;
    this.resId = textViewResourceId; 
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent)
  {
    if (convertView == null)
      convertView = inflater.inflate(layoutId, parent,false);

    String text = getItem(position);
    Spannable s = Spannable.Factory.getInstance().newSpannable(text);
    s.setSpan(new ForegroundColorSpan(Color.RED), 0, text.length()/2, 0);
    s.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, text.length()/2, 0);
    s.setSpan(new ForegroundColorSpan(Color.DKGRAY), text.length()/2, text.length(), 0);
    s.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), text.length()/2, text.length(), 0);

    ((TextView)convertView.findViewById(resId)).setText(s, TextView.BufferType.SPANNABLE);

    return convertView;
  }
}

结果:

在此处输入图像描述

要创建它的实例(假设您是从 Activity 执行此操作),我做了什么:

ArrayList <String> items = new ArrayList <String> ();
items.add ("Array Adapter");

ExampleAdapter dizi = new ExampleAdapter (YourActivity.this,android.R.layout.simple_list_item_1,android.R.id.text1,items);
list.setAdapter(dizi);

dizi.add ("your text");
dizi.notifyDataSetChanged();
于 2013-03-11T15:49:33.323 回答