1

パブリッククラスImageAdapterextendsBaseAdapter内で宣言されたR.drawables画像で構成されるアクティビティの配列があります。だからそれはで構成されています

private   Integer[] imageIDs = {
            R.drawable.medal_my_first_perxtamp_gray,
            R.drawable.medal_you_complete_me_gray,
            R.drawable.medal_the_gift_of_sharing_gray,
            R.drawable.medal_gimme_5_gray,
            R.drawable.medal_a_cup_of_coffee_gray,
            R.drawable.medal_seven_up_gray,
            R.drawable.medal__gray,
            R.drawable.medal_midnight_madness_gray,
            R.drawable.medal_loyalista_gray,
            R.drawable.medal_15_30_gray,
            R.drawable.medal_kmh_gray,
            R.drawable.medal_champion_gray
            };

アクティビティを拡張するクラスで、その配列を呼び出して特定の値を取得するにはどうすればよいですか?簡単な質問で申し訳ありませんが、私はこのAndroid開発に不慣れです

編集:

これを追加するのを忘れました。これは、ImageAdapterクラス内にも格納されている配列の長さを取得するための宣言です。

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

そして、ゲッターのためにこのコードを追加しました

public  Integer[] getImageIDs()
    {
        return this.imageIDs;
    } 

サー これは、アクティビティを拡張する他のクラスで作成しようとしているコードです。

 GridView gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this));

    gridView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, 
        View v, int position, long id) 
        {   
             //Integer[] imageIDs = this.getImageIDs();
            // clicked picture here
            Integer[] imageIDs = this.getImageIDs();
            //Toast.makeText(getBaseContext(),"pic" + (position + 1) + " selected",Toast.LENGTH_SHORT).show();
            //Integer[] imageIDs = ImageAdapter.this.getImageIDs();
            //for (Integer imageId : ImageAdapter.getImageIDs()){
                //  System.out.println(imageId );
                //}
        }
    });  

ポジションを取得できることを確認してください。ただし、if else Tutorial Hereを使用してこれらのチュートリアルを使用したくないのは、elseの場合は長くなると思うからです。私が考えているのは、私は配列を持っているので、なぜ私が探しているものを取得するためにそれを使用できないのかということです

4

3 に答える 3

1

オブジェクト指向の方法と、 public//アクセス修飾子を使用してゲッターを作成する方法の2つのオプションがあります。それ以外の場合は、privateではなく配列//を宣言するだけです。protecteddefaultpublicprotecteddefault

これにより、拡張クラスの配列にアクセスできるようになります。クラスを拡張するクラスの配列にアクセスできるようにしたいだけの場合は、配列またはゲッターメソッドをとして宣言しますprotected

だから、あなたはそのようなことをすることができます:

public ActivityClass
{
    private Integer[] imageIDs = ...;

    protected Integer[] getImageIDs()
    {
        return this.imageIDs;
    } 
}

そして、あなたの拡張クラスでは:

public SomeOtherClass extends ActivityClass
{
    ...    
    Integer[] imageIDs = this.getImageIDs();
    ...
}

これを見た後:

GridView gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this));

    gridView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, 
        View v, int position, long id) 
        {   
             //Integer[] imageIDs = this.getImageIDs();
            // clicked picture here
            Integer[] imageIDs = this.getImageIDs();
            //Toast.makeText(getBaseContext(),"pic" + (position + 1) + " selected",Toast.LENGTH_SHORT).show();
            //Integer[] imageIDs = ImageAdapter.this.getImageIDs();
            //for (Integer imageId : ImageAdapter.getImageIDs()){
                //  System.out.println(imageId );
                //}
        }
    });  

問題は、このコードが次のことです。

gridView.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> parent, 
            View v, int position, long id) 
            {   
                 //Integer[] imageIDs = this.getImageIDs();
                // clicked picture here
                Integer[] imageIDs = this.getImageIDs();
                //Toast.makeText(getBaseContext(),"pic" + (position + 1) + " selected",Toast.LENGTH_SHORT).show();
                //Integer[] imageIDs = ImageAdapter.this.getImageIDs();
                //for (Integer imageId : ImageAdapter.getImageIDs()){
                    //  System.out.println(imageId );
                    //}
            }
        }); 

それ自体のクラスです(内部クラスと呼ばれます)。コンパイラーに関する限り、あなたはもはやあなたの活動から拡張するクラスの中にいません。それはコンパイラがそのように不平を言った理由を説明するでしょう:The method getImageIDs() is undefined for the type new AdapterView.OnItemClickListener(){}

これを回避するには、次のようにする必要があります。

GridView gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this));
    final Integer[] imageIDs = this.getImageIDs();

    gridView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, 
        View v, int position, long id) 
        {   
            for (Integer imageId : imageIDs){
                System.out.println(imageId );
            }
        }
    });

上記のコードは機能するはずです。イベントハンドラーの外部からIDを取得し、配列をfinalとして宣言して、イベント処理を処理する内部クラスに渡すことができるようにすることが重要です。

于 2012-08-22T07:14:28.920 に答える
0

パブリックゲッターメソッドを使用してimageIDs

for (Integer imageId : imageAdapter.getImageIDs()){
  System.out.println(imageId );
}

特定のインデックスでIDにアクセスする:

imageAdapter.getImageIDs()[i];  // i is index of array
于 2012-08-22T07:16:40.673 に答える
0

アクティビティで、imageIDを保護します。

protected Integer[] imageIDs = {
...
};

あなたがあなたの活動を拡張するクラスからそれにアクセスすることができるより。

于 2012-08-22T07:19:06.617 に答える