【问题标题】:Typeface error in extended BaseAdapter class扩展 BaseAdapter 类中的字体错误
【发布时间】:2014-02-06 11:43:12
【问题描述】:

我正在使用从BaseAdapter 扩展而来的ListViewAdapter class tat,

在尝试为三个文本视图设置自定义 Typeface 时,部署到模拟器后出现错误。

我可以设置成一个普通的Activity类,但是BaseAdapter类有一些逻辑或语法问题,指出我代码中的错误,不胜感激。

我的代码

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {

    // Declare Variables
    Context context;
    private Activity activity;
    LayoutInflater inflater;
    ArrayList<HashMap<String, String>> data;
    ImageLoader imageLoader;
    HashMap<String, String> resultp = new HashMap<String, String>();
    public ListViewAdapter(Context context,
            ArrayList<HashMap<String, String>> arraylist) {
        this.context = context;
        data = arraylist;
        imageLoader = new ImageLoader(context);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }
    
    
    public View getView(final int position, View convertView, ViewGroup parent) {
        // Declare Variables
        
        TextView rank;
        TextView country;
        TextView population;
        ImageView flag;
        
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.listview_item, parent, false);
        // Get the position
        resultp = data.get(position);

        // Locate the TextViews in listview_item.xml
        rank = (TextView) itemView.findViewById(R.id.rank);
        country = (TextView) itemView.findViewById(R.id.country);
        population = (TextView) itemView.findViewById(R.id.population);
        
        Typeface type = Typeface.createFromAsset(activity.getAssets(),"fonts/Paprika-Regular.ttf"); 
        rank.setTypeface(type);
        country.setTypeface(type);
        population.setTypeface(type);
        // Locate the ImageView in listview_item.xml
        flag = (ImageView) itemView.findViewById(R.id.flag);

        
        
        // Capture position and set results to the TextViews
        rank.setText(resultp.get(MainActivity.RANK));
        country.setText(resultp.get(MainActivity.COUNTRY));
        population.setText(resultp.get(MainActivity.POPULATION));
        // Capture position and set results to the ImageView
        // Passes flag images URL into ImageLoader.class
        imageLoader.DisplayImage(resultp.get(MainActivity.FLAG), flag);
        // Capture ListView item click
        itemView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Get the position
                resultp = data.get(position);
                Intent intent = new Intent(context, SingleItemView.class);
                // Pass all data rank
                intent.putExtra("rank", resultp.get(MainActivity.RANK));
                // Pass all data country
                intent.putExtra("country", resultp.get(MainActivity.COUNTRY));
                // Pass all data population
                intent.putExtra("population",resultp.get(MainActivity.POPULATION));
                // Pass all data flag
                intent.putExtra("flag", resultp.get(MainActivity.FLAG));
                // Start SingleItemView Class
                context.startActivity(intent);

            }
        });
        return itemView;
    }
}

【问题讨论】:

    标签: android baseadapter typeface


    【解决方案1】:

    你应该替换这个

    Typeface type = Typeface.createFromAsset(activity.getAssets(),
                                        "fonts/Paprika-Regular.ttf"); 
    

    Typeface type = Typeface.createFromAsset(context.getAssets(),
                                        "fonts/Paprika-Regular.ttf"); 
    

    【讨论】:

      【解决方案2】:

      使用context.getAssets() 而不是activity.getAssets(),因为您忘记初始化activity

      Typeface type = Typeface.createFromAsset(context.getAssets(),
                                              "fonts/Paprika-Regular.ttf"); 
      

      也不要每次都在 getView 方法中创建视图,而是这样做。

      View itemView = (convertView == null) ? inflater.inflate(R.layout.listview_item, parent, false) : convertView;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多