1

テキストビューをリストビューに動的に追加しようとしています。追加する前にテキストを設定しますが、リストビューのテキストでは「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 を使用してデータを表示しているため、アダプタを に変更してArrayAdapter<String>から、表示する文字列を追加することをお勧めします。

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

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

レイアウトを変更したい場合は、メソッドを拡張ArrayAdapterしてオーバーライドしますgetView()。このチュートリアルでは、もう少し詳しく説明します。

いくつかの を実装するofにArrayAdapter裏打ちされたの小さな例:ListStringSpannable

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;
  }
}

結果:

ここに画像の説明を入力

そのインスタンスを作成するには (アクティビティからこれを行っていると仮定します)、私がしたこと:

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 に答える