0

私は ListAdapters を機能させた経験があり、GridView とやり取りするためのカスタム アダプターのチュートリアルをオンラインで探しましたが、私の機能がうまくいかないようです。私の回線で NullPointerException を受け取りました:

image.setBackgroundColor(Color.GREEN);

私のアクティビティとアダプターは次のとおりです: FixtureActivity:

package net.blakely.paul.Hyperion;

import android.os.Bundle;
import android.widget.GridView;
import com.actionbarsherlock.app.SherlockActivity;

public class FixtureActivity extends SherlockActivity {


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fixtures);
        FixtureItemAdapter fia = new FixtureItemAdapter(this, 6);
        GridView grids = (GridView) findViewById(R.id.grids);
        grids.setAdapter(fia);

        }

}

FixtureItemAdapter:

package net.blakely.paul.Hyperion;

import android.app.Activity;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class FixtureItemAdapter extends BaseAdapter {

    private Activity context;
    public int size;
    private ImageView image;
    private TextView label;

    public FixtureItemAdapter(Activity context, int size) {
        super();
        this.context = context;
        this.size = size;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return size;
    }

    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub


        Log.v("Hyperion","convertView is Null?="+Boolean.toString(convertView==null));
        if (convertView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            convertView = (LinearLayout) inflater.inflate(net.blakely.paul.Hyperion.R.layout.outputitem, null, true);

            image = (ImageView) convertView.findViewById(net.blakely.paul.Hyperion.R.id.imageView1);
            Log.v("Hyperion","image is Null?="+Boolean.toString(image==null));
            label = (TextView) convertView.findViewById(net.blakely.paul.Hyperion.R.id.textView2);


        } 

        // Decide which channel this is and set information accordingly

        image.setBackgroundColor(Color.GREEN);
        label.setText("LABEL");

        return convertView;
    }

}

この問題に関するヘルプをいただければ幸いです。それが価値があるもののために。convertView が null の場合、アダプターを介した最初の実行で NPE を取得し、画像も null になることがわかりました。

4

2 に答える 2

0

あなたが呼ぶ

image.setBackgroundColor(Color.GREEN);
label.setText("LABEL");

if ステートメントを入力しないと、イメージ オブジェクトとラベル オブジェクトがインスタンス化されず、setBackroundColr と setText を呼び出したときに null ポインター例外が発生します。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub


        Log.v("Hyperion","convertView is Null?="+Boolean.toString(convertView==null));
        if (convertView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            convertView = (LinearLayout) inflater.inflate(net.blakely.paul.Hyperion.R.layout.outputitem, null, true);

        } 
          image = (ImageView)convertView.findViewById(net.blakely.paul.Hyperion.R.id.imageView1);
          label = (TextView) convertView.findViewById(net.blakely.paul.Hyperion.R.id.textView2);
        // Decide which channel this is and set information accordingly

        image.setBackgroundColor(Color.GREEN);
        label.setText("LABEL");
于 2012-06-04T03:05:46.903 に答える
0

申し訳ありませんが、問題が見つかりました。プログラム内の別の ListAdapter からその行をコピーしたため、fixtureitem ではなく outputitem という間違った xml ファイルを呼び出していたことが判明しました。回答ありがとうございます。

于 2012-06-04T17:27:03.400 に答える