1

我的 Activity 上有一个数组,其中包含在公共类 ImageAdapter 扩展 BaseAdapter 中声明的 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;
    }

并为getter添加了这段代码

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中使用那些教程,因为我认为 if else 会很长。我在想的是,既然我有一个数组,为什么我不能用它来得到我正在寻找的东西

4

3 回答 3

1

您将有两个选择,要么是面向对象的方式,要么创建一个带有 // 访问修饰符的 getter,public否则,只需声明数组//protected而不是私有的。defaultpublicprotecteddefault

这应该允许您访问扩展类中的数组。如果您只想能够访问扩展您的类的类中的数组,只需将数组或 getter 方法声明为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

使用公共 getter 方法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

在您的活动中使 imageIDs 受到保护:

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

比你可以从扩展你的活动的类中访问它。

于 2012-08-22T07:19:06.617 回答