0

画面上部にEditTextフィールドがあるグリッドレイアウトがあります。グリッドレイアウトの値を入力するためのベースアダプタを実装しています。

私が使用しているコードは次のとおりです。私の主な活動

public class MainActivityDynamic extends Activity{

GridView gridView;
GridObject[] planets;
ArrayList<GridObject> myObjects;
Button Go;
ImageAdapter adapter;
int position;
boolean[] itemChecked;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gridlayout);
    Go = (Button)findViewById(R.id.bGO);
    gridView = (GridView) findViewById(R.id.gV); 
    String[] primarycontext =  {"first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","leventh","twelth","thirteenth","fouteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","twenteth","twentyfirst","twentysecond", "twentythird","twentythird","twentyfouth"};

    gridView.setAdapter(new ImageAdapter(this, primarycontext));
    gridView.setOnItemClickListener(new GridView.OnItemClickListener(){

        public void onItemClick(AdapterView<?> arg0, View v, int position,
                long id) {
            // TODO Auto-generated method stub
            //myObjects.get(position).setState(1);
            //myAdapter.notifyDataSetChanged();

            Toast.makeText(getBaseContext(), "clicked on "+position, Toast.LENGTH_SHORT).show();
        }

    });


    Go.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            //adapter.notifyDataSetChanged();
            int len = 10;
            int cnt = 0;
            String selectImages = "";
            for (int i = 0;i<len; i++){
                if (adapter.itemChecked[i]){
                    cnt++;
                }
            }
            if(cnt == 0){
                Toast.makeText(getBaseContext(), "please select atleast one", Toast.LENGTH_SHORT).show();
            }else
            {
                Toast.makeText(getBaseContext(), "you have selected" + cnt + "boxes", Toast.LENGTH_SHORT).show();
            }
            String item = (String) adapter.getItem(position);
            Toast.makeText(getBaseContext(), "selected fields"+item, Toast.LENGTH_SHORT).show();
        }
    });
    }

}

public class ImageAdapter extends BaseAdapter
{
    Context mContext;
    public ImageAdapter(Context c,String[] primarycontext)
    {
        mContext = c;
    this.primarycontext = primarycontext;
    }
    @Override
    public int getCount() 
    {
        // TODO Auto-generated method stub
        return providers.length;
    }
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return primarycontext[position];
}
    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        // TODO Auto-generated method stub
        View v;
    if(convertView==null){
    LayoutInflater li = (LayoutInflater) mContext
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = new View(mContext);
    v = li.inflate(R.layout.icon, null);
    }
    else
    {
     v = convertView;  
         }
        ImageView iv = (ImageView)v.findViewById(R.id.grid_item_image);
    iv.setImageResource(R.drawable.folder_0);
    CheckBox CBx = (CheckBox)v.findViewById(R.id.cBIon);
    CBx.setText(primarycontext[position]);
        CBx.setChecked(isItemChecked(position));   
        return v;
    }
private boolean isItemChecked(int position) {
    // TODO Auto-generated method stub
    System.out.println("the returning items="+itemChecked);
    return itemChecked;
}
}
}

メインレイアウトでは、テキストと画像を含むチェックボックスで占められたグリッドビューがあります。[送信(実行)]ボタンがあります。このボタンをクリックすると、メインアクティビティでチェックされているチェックボックスのすべての名前がキャプチャされます。どうやってやるの?このコードを実行して[実行]をクリックすると、アプリケーションがクラッシュし、nullポインター例外が返されます。

エラー

11-25 05:43:50.390: E/AndroidRuntime(519): FATAL EXCEPTION: main
11-25 05:43:50.390: E/AndroidRuntime(519): java.lang.NullPointerException
11-25 05:43:50.390: E/AndroidRuntime(519):  at com.example.kam1.MainActivityDynamic$2.onClick(MainActivityDynamic.java:73)
11-25 05:43:50.390: E/AndroidRuntime(519):  at android.view.View.performClick(View.java:2408)
11-25 05:43:50.390: E/AndroidRuntime(519):  at android.view.View$PerformClick.run(View.java:8816)
11-25 05:43:50.390: E/AndroidRuntime(519):  at android.os.Handler.handleCallback(Handler.java:587)
4

1 に答える 1

1

adapter変数を初期化する場所がどこにもありません。これを置き換えます:

gridView.setAdapter(new ImageAdapter(this, primarycontext));

adapter = new ImageAdapter(this, primarycontext);
gridView.setAdapter( adapter );

また、使用しないでくださいgetBaseContext()MainActivityDynamic.this代わりに使用する必要があります。

そして、デバッグ目的でToastを使用しているようです-に切り替えることをお勧めしますLogドキュメントを参照

于 2012-11-25T11:28:41.703 に答える