有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用数组适配器填充列表视图

我正在尝试使用阵列适配器填充列表。我有3门课,自行车,自定义适配器和UseCustomAdapter。我有一个例子,我已经通过比较它与我的,似乎无法找出为什么它只是不运行!只要说,每次我试着加载它时,它就停止工作了。代码如下:

自行车。爪哇

package com.example.tasktwo;

public class Bike {

    private String title;
    private String imageName;


    //Constructor
    Bike (String title,  String imageName) {
        this.title= title;
        this.imageName = imageName;
    }

    public void setTitle(String title){
        this.title = title;
    }

    public void setImage(String imageName){
        this.imageName = imageName;
    }   

    public String getBikeTitle(){
        return title;
    }

    public String getBikeImageName(){
        return imageName;
    }
}

客户适配器。爪哇

public class CustomAdapter extends ArrayAdapter<Bike>  {
    private final Context context;
    //List of Walk Objects
    private ArrayList<Bike> bikes;

    //Receives the context and the list of walk objects
    public CustomAdapter  (Context context, ArrayList<Bike> bikes) {
        super(context, R.layout.bike_view, bikes);
        this.context = context; 
        this.bikes = bikes;
    }

    @SuppressLint("ViewHolder")
    public View getView(int position, View convertView, ViewGroup parent) {
        Bike bike = bikes.get(position);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.bike_view, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.bike_names);
        textView.setText(bike.getBikeTitle());      
        ImageView imageView = (ImageView) rowView.findViewById(R.id.bike_image);
        Resources res = context.getResources();
        int imageId = res.getIdentifier(bike.getBikeImageName(), "drawable", "com.example.tasktwo");
        imageView.setImageResource(imageId);
        return rowView;
    }
}

使用CustomerAdapter。爪哇

package com.example.tasktwo;

public class UseCustomAdapter extends ListActivity {

    ArrayList<Bike> bikes = new ArrayList<Bike>();

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        bikes.add(new Bike("Honda", "honda"));
        bikes.add(new Bike("Suzuki", "suzuki"));
        bikes.add(new Bike("Kawasaki", "kawasaki"));
        bikes.add(new Bike("KTM", "ktm"));
        CustomAdapter adapter = new CustomAdapter(this, bikes);
        setListAdapter(adapter);
    }

    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Bike b = bikes.get(position);
        Toast.makeText(this,"You selected the " + b.getBikeTitle()
                        + "Motocross Bike",Toast.LENGTH_SHORT).show();
    }
}

日志:

03-10 14:34:53.240: E/AndroidRuntime(1009): FATAL EXCEPTION: main
03-10 14:34:53.240: E/AndroidRuntime(1009): Process: com.example.tasktwo, PID: 1009
03-10 14:34:53.240: E/AndroidRuntime(1009): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tasktwo/com.example.tasktwo.BikeList}: java.lang.NullPointerException
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.app.ActivityThread.access$800(ActivityThread.java:135)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.os.Handler.dispatchMessage(Handler.java:102)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.os.Looper.loop(Looper.java:136)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.app.ActivityThread.main(ActivityThread.java:5017)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at java.lang.reflect.Method.invokeNative(Native Method)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at java.lang.reflect.Method.invoke(Method.java:515)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at dalvik.system.NativeStart.main(Native Method)
03-10 14:34:53.240: E/AndroidRuntime(1009): Caused by: java.lang.NullPointerException
03-10 14:34:53.240: E/AndroidRuntime(1009):     at com.example.tasktwo.BikeList.onCreate(BikeList.java:20)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.app.Activity.performCreate(Activity.java:5231)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-10 14:34:53.240: E/AndroidRuntime(1009):     at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
03-10 14:34:53.240: E/AndroidRuntime(1009):     ... 11 more

AndroidManifest。xml

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    package="com.example.tasktwo"
    安卓:versionCode="1"
    安卓:versionName="1.0" >

    <uses-sdk
        安卓:minSdkVersion="19"
        安卓:targetSdkVersion="19" />

    <application
        安卓:allowBackup="true"
        安卓:icon="@drawable/ic_launcher"
        安卓:label="@string/app_name"
        安卓:theme="@style/AppTheme" >
        <activity
            安卓:name=".BikeList"
            安卓:label="@string/app_name" >
            <intent-filter>
                <action 安卓:name="安卓.intent.action.MAIN" />

                <category 安卓:name="安卓.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

共 (1) 个答案

  1. # 1 楼答案

    根据你的回答,我认为这是解决办法

    <activity android:name=".MainActivity" >
    </activity>
    

    注意,名称为MainActivity,这是默认值。此名称取决于主活动类的名称。因此,将其设置为任何类名。 Android Studio或Eclipse的问题是,当您开始更改项目名称时,所有引用都没有正确更改