1

私はAndroidの開発と開発全般に少し慣れていません。水平方向にめくることができる2ページのビューページャーを備えたカスタムレイアウトがあります(これらは問題なく機能します)。最初のページには、ページを埋めるグリッドビューがあります。ただし、それを機能させるために数え切れないほどのさまざまな方法を試しましたが、グリッドビューに画像が表示されず、nullポインター例外が発生します。

ビューページャーを保持するレイアウトファイルがあり、ビューページャーのIDはfontsviewpagerです。次に、2つのページに2つの別々のレイアウトがあり、最初のレイアウトにはグリッドビューがあります。gridviewのIDはitaliclcgridです。

アクティビティは次のとおりです。

public class CalligraphyFontsActivity extends Activity implements
    View.OnClickListener {
public Typeface calligraphyfont;
public TextView italiclowercase;

@Override
public void onCreate(Bundle savedInstanceState) {
    SharedPreferences getPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());
    boolean fullscreen = getPrefs.getBoolean("fullscreen", true);
    if (fullscreen) {
        setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
    } else {
        setTheme(android.R.style.Theme_NoTitleBar);
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calligraphyfonts2);
    MyPagerAdapter adapter = new MyPagerAdapter();
    ViewPager myPager = (ViewPager) findViewById(R.id.fontsviewpager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(0);
    ImageView backhomebutton = (ImageView) findViewById(R.id.backhomebutton);
    ImageView settingspic = (ImageView) findViewById(R.id.settingspic);
    calligraphyfont = Typeface.createFromAsset(getAssets(),
            "fonts/MTCORSVA.TTF");
    settingspic.setOnClickListener(this);
    backhomebutton.setOnClickListener(this);
    GridView gridview = (GridView) findViewById(R.id.italiclcgrid);
    gridview.setAdapter(new ImageAdapter(this));

}

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

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

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) { // if it's not recycled, initialize some
                                    // attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85,     85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = { R.drawable.capitalagray,
            R.drawable.capitalbgray, R.drawable.capitalcgray };

}

public void onClick(View v) {
    Intent launchsettings = new Intent(CalligraphyFontsActivity.this,
            Settings.class);
    switch (v.getId()) {
    case R.id.backhomebutton:
        finish();
        break;
    case R.id.settingspic:
        startActivity(launchsettings);
        break;

    }
}

public class MyPagerAdapter extends PagerAdapter {

    public int getCount() {
        return 2;
    }

    public Object instantiateItem(View collection, int position) {
        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        int resId = 0;
        switch (position) {
        case 0:
            resId = R.layout.italiclc;

            break;
        case 1:
            resId = R.layout.italicuc;
            break;
        }

        View view = inflater.inflate(resId, null);
        if (resId == R.layout.italiclc) {
            TextView italiclowercase = (TextView) view
                    .findViewById(R.id.italiclowercase);
            italiclowercase.setTypeface(calligraphyfont);
        }
        if (resId == R.layout.italicuc) {
            TextView italicuppercase = (TextView) view
                    .findViewById(R.id.italicuppercase);
            italicuppercase.setTypeface(calligraphyfont);

        }
        ((ViewPager) collection).addView(view, 0);

        return view;
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);

    }

    @Override
    public void finishUpdate(View arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);

    }

    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    public Parcelable saveState() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void startUpdate(View arg0) {
        // TODO Auto-generated method stub

    }

    public void onClick(View v) {
        // TODO Auto-generated method stub

    }

}

}

前に言ったように、私はそれを無駄に機能させるために多くの異なる方法を試しました。例外は、イメージアダプタをグリッドビューに設定する行(29行目)から発生します。提供できるどんな助けでも大いに感謝されるでしょう。

4

1 に答える 1

1

2つのページに2つの別々のレイアウトがあり、最初のレイアウトにはグリッドビューがあります。

したがって、次のステートメントに問題があります。

GridView gridview = (GridView) findViewById(R.id.italiclcgrid);

ここでは、から参照しようとしていGridViewますmain.xml。むしろ、定義したレイアウトファイルから参照する必要があります。

コードは次のようになります。

setContentView(R.layout.calligraphyfonts2);
GridView gridview = (GridView) findViewById(R.id.italiclcgrid);

したがって、レイアウトGridViewで定義されていることを確認するか、calligraphyfonts2インフレータを使用して別のレイアウトから参照してみてください。

italiclcレイアウトで定義した場合はGridView、コードに次の変更を追加します。

settingspic.setOnClickListener(this);
backhomebutton.setOnClickListener(this);
GridView gridview = (GridView) findViewById(R.id.italiclcgrid); // <- Remove this
gridview.setAdapter(new ImageAdapter(this)); // <-- Remove this

そして、ここに追加します。

if (resId == R.layout.italiclc) {
  GridView gridview = (GridView) view.findViewById(R.id.italiclcgrid);
  gridview.setAdapter(new ImageAdapter(mContext));

  TextView italiclowercase = (TextView) view.findViewById(R.id.italiclowercase);
  italiclowercase.setTypeface(calligraphyfont);
}
于 2012-06-17T05:04:02.480 に答える