2012-02-18 9 views
0

で私が持っている:のsetText()のTextViewのlist_row.xml

  1. 一つMyListActivity class extends ListActivitysetContentView(R.layout.mylist)
  2. 2つのxmlファイル:mylist.xmlおよびlist_row.xml
  3. mylist.xmlはレイアウトで、list_row.xmlは各行の外観です。
  4. list_row.xmlは、3 TextViews(t1,t2,t3)を含む。

クラスのt2のテキストを変更したいとします。コンテンツビューはmylist.xmlなので、単にfindViewByIdを使用することはできません。だから私はLayoutInflaterを使った。

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
    View v = inflater.inflate(R.layout.list_row, null); 

    textView2 = (TextView) v.findViewById(R.id.t2); 
    textView2.setText("ccccc"); 

問題は、t2のテキストは決して変更されないということです。私は何度も試してみましたが、テキストはlist_row.xmlで設定したテキストのままです。私は理由を理解することができません..誰かが助けてくれますか。ありがとう!

===== ソリューション:=====

は自分SimpleCursorAdapterクラスを作成し、getView()メソッドをオーバーライドします。私はそのラインを持っていない場合は、textView1は常に(例えば。textView1は、IDを示している場合、これは常に1である)最初の行の値が表示されますので、

private class MySimpleCursorAdapter extends SimpleCursorAdapter { 
    Cursor c; 
    public MySimpleCursorAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     this.c = c; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     super.getView(position, convertView, parent); 
     LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.list_row, parent, false); 
     TextView textview1 = (TextView) rowView.findViewById(R.id.text1); 
     textView1.setText(c.getString(1));// whatever should be in textView1 
     textView2 = (TextView) rowView.findViewById(R.id.text2); 
     textView2.setText("ccccc"); 
     return rowView; 
    } 
} 

super.getView(position, convertView, parent);は非常に重要です。

答えて

1

TextViewのテキストを変更する場合は、ListViewのアダプタで行う必要があります。

+0

こんにちは、返信ありがとうございます。私はSimpleCursorAdaperを持っていて、 "指定されたXMLファイルからビューを呼び出す" public View newView(コンテキストコンテキスト、カーソルカーソル、ViewGroup親) 'public abstract View getView(int position、View convertView、ViewGroup私はXMLファイルから膨らませることができます。しかし、APIでは、どのように膨らませるのかは述べていません。あなたは例へのリンクを提供できますか?ありがとうございます – Dongminator

+0

別の質問です。ルートビューはリストビューであり、各行はリストビューの子ですか? – Dongminator

+0

ええ、問題は解決しました!単に 'MySimpleCursorAdapter'を追加し、' getView() 'をオーバーライドしてそこのテキストを変更してください。 getView()は、各行に対してアダプタによって呼び出されることが判明しました。ありがとう! – Dongminator

0

テキストビューを変更する最も良い方法はgetView()です。詳細を知るには、thisの例を参照してください。

関連する問題