1

我正在尝试修改来自 MyKong 的代码,添加一些更改 textview 字体的行,但是当我尝试运行时,我遇到了强制关闭。

这是 MobileArrayAdapter.java

> package com.mkyong.android.adaptor;
> 
> import com.mkyong.android.R;
> 
> import android.content.Context; import
> android.content.res.AssetManager; import android.graphics.Color;
> import android.graphics.Typeface; import android.view.LayoutInflater;
> import android.view.View; import android.view.ViewGroup; import
> android.widget.ArrayAdapter; import android.widget.ImageView; import
> android.widget.TextView;
> 
> public class MobileArrayAdapter extends ArrayAdapter<String> {
>   private final Context context;  private final String[] values;
> 
>   public MobileArrayAdapter(Context context, String[] values) {
>       super(context, R.layout.list_mobile, values);       this.context =
> context;      this.values = values;   }
> 
>   @Override   public View getView(int position, View convertView,
> ViewGroup parent) {       LayoutInflater inflater = (LayoutInflater)
> context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        View
> rowView = inflater.inflate(R.layout.list_mobile, parent, false);
>       TextView textView = (TextView) rowView.findViewById(R.id.label);
>       ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
> // Here starts my modify
>               Context context1 = null;
>               AssetManager assetManager = context1.getResources().getAssets();        Typeface typeface = Typeface.createFromAsset(assetManager,
> "fonts/principale.ttf");      textView.setTextColor(Color.RED);
>       textView.setTypeface(typeface); // Here ends
>               textView.setText(values[position]);
> 
>       // Change icon based on name        String s = values[position];
> 
>       System.out.println(s);
> 
>       if (s.equals("WindowsMobile")) {
>           imageView.setImageResource(R.drawable.windowsmobile_logo);      } else
> if (s.equals("iOS")) {
>           imageView.setImageResource(R.drawable.ios_logo);        } else if
> (s.equals("Blackberry")) {
>           imageView.setImageResource(R.drawable.blackberry_logo);         } else {
>           imageView.setImageResource(R.drawable.android_logo);        }
> 
>       return rowView;     } }

这里 ListMobileActivity.java

package com.mkyong.android;

import com.mkyong.android.adaptor.MobileArrayAdapter;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.view.View;

public class ListMobileActivity extends ListActivity {

    static final String[] MOBILE_OS = new String[] { "Android", "iOS",
            "WindowsMobile", "Blackberry"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setListAdapter(new MobileArrayAdapter(this, MOBILE_OS));        
    }
}

这里是 list_mobile.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="5dp" >

    <ImageView
        android:id="@+id/logo"
        android:layout_width="50px"
        android:layout_height="50px"
        android:layout_marginLeft="5px"
        android:layout_marginRight="20px"
        android:layout_marginTop="5px"
        android:src="@drawable/windowsmobile_logo" >
    </ImageView>

    <TextView
        android:id="@+id/label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/label"
        android:textSize="30px" >
    </TextView>

</LinearLayout>

现在,我知道我问了很多,但我该如何解决呢?从自定义适配器更改字体的正确方法是什么?感谢您的答复。

4

1 回答 1

1

MobileArrayAdapter类 getView 方法中,您使用null上下文来访问 AssetManager,因此请更改

Context context1 = null; 

Context context1 = context;
于 2012-12-25T17:24:26.273 回答