2012-01-30 16 views
1

私はアプリのいくつかの部分でこの問題を抱えていますが、私は1つに固執します:現在アクティブではないビューのレイアウトを変更するにはどうすればよいですか?

アプリ全体でフォントサイズや書体を更新する設定画面があります。それは私の連絡先ピッカーを除いて素晴らしく動作します。これは、私がそれを作成しています方法は次のとおりです。

R.id.contactEntryTextは現在、(それだけでは、レイアウトに適応)膨張されているものとは別の.xmlである
private void populateContactList() { 

    Cursor cursor = getContacts(); 
    fields = new String[] { ContactsContract.CommonDataKinds.Email.DATA }; 
    adapter = new SimpleCursorAdapter(this, R.layout.entry, cursor, fields, 
      new int[] { R.id.contactEntryText }); 
    mContactList.setAdapter(adapter); 
} 

当然、findViewByIdを実行しようとするとnullポインタ例外が発生するため、当然setTextColor();を指定することはできません。

どのように私はそのレイアウトのフォントスタイルを変更して、私のリストビューがそれを拾うのですか?

答えて

2

SimpleCursorAdapterを使用する代わりに、それを拡張します。次に、getViewでUI(テキストの色、フォントのサイズなど)を変更することができます。アダプターまたはアクティビティーのどこかで(onCreate ...)、プリファレンス・マネージャーを介してプリファレンスを検索して、設定アクティビティーで設定された色またはサイズを取得できます。

アクティビティ間の通信にハンドラを使用することはできません。

更新、明瞭さの欠如のため申し訳ありませんが、あなたのアダプタをオーバーライドする必要があります。ListActivityではなく、(または単に)無効にする必要があります。ここではいくつかのコードは次のとおりです。あなたの活動で

private void populateContactList() { 

    Cursor cursor = getContacts(); 
    fields = new String[] { ContactsContract.CommonDataKinds.Email.DATA }; 
    adapter = new MyAdapter(this, R.layout.entry, cursor, fields, 
     new int[] { R.id.contactEntryText }); 
    mContactList.setAdapter(adapter); 
} 

MyAdapterは、単純なカーソルアダプタを拡張し、独自のカスタムアダプタです。あなたがする必要があるのは、各行のテキストビューを見つけていくつかのプロパティを変更することです(これは私の理解です)。super.getViewを呼び出して各行のViewGroupを取得し、そのViewGroupのfindViewByIdを呼び出してTextViewを取得します。一度それを持っていると、あなたはあなたが望むようにプロパティを変更することができます。以下は最も基本的な実装の概要です:

関連する問題