1

我的活动中有一个列表视图(其项目中有一个文本视图)和一个按钮。我正在使用加载器机制将数据加载到列表视图中。我正在点击按钮开始应用程序的设置活动。用户可以在设置屏幕中更改字体类型和大小。我正在从首选项中获取更改的字体值,并将其设置为我的自定义适配器类的 bindView() 方法中的 textviews。但是只有当我再次开始活动时,我才能在列表视图中看到更改后的字体。用户从设置屏幕单击后退按钮后,如何将更改的字体大小和类型应用于列表视图项目?如何刷新我的列表视图以仅更改字体?请指导我。

我尝试了以下方法来刷新列表视图,但它没有用,因为它仅在适配器数据集更改时通知。

@Override
public void onResume() {
    super.onResume();
    adapter.notifyDataSetChanged();
 } 
4

2 回答 2

3

更改字体后调用此方法。在此参数中,“v”是您的列表视图或列表视图父级,“f”是您的方法中的字体。

    /**
 * To apply custom font for whole activity
 */
public static void applyFontForWholeActivity(final View v) {
    // Typeface fontToSet = Typeface.createFromAsset(v.getContext()
    // .getAssets(), "fonts/EUROSTILE_BOLD.TTF");

    try {
        if (v instanceof ViewGroup) {
            ViewGroup vg = (ViewGroup) v;
            for (int i = 0; i < vg.getChildCount(); i++) {
                View child = vg.getChildAt(i);
                applyFontForWholeActivity(child);
            }
        } else if (v instanceof TextView) {
            TextView tv = (TextView) v;
            tv.setTypeface(ActivityUtils.fontToSetGlobal);
        }
    } catch (Exception e) {
        e.printStackTrace();
        // ignore
    }
}
于 2013-10-02T11:18:36.410 回答
0

再次设置您的适配器:

    @Override
    public void onResume() {
      super.onResume();
      listview.setAdapter(adapter);
      adapter.notifyDataSetChanged();
    } 
于 2013-10-02T11:09:23.753 回答