Java Android在其他类的数组上获取特定值

Java Android在其他类的数组上获取特定值,java,android,Java,Android,我的活动中有一个数组,它由在 公共类ImageAdapter扩展了BaseAdapter。 所以它包括 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,

我的活动中有一个数组,它由在 公共类ImageAdapter扩展了BaseAdapter。 所以它包括

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 );
                //}
        }
    });  
GridView GridView=(GridView)findviewbyd(R.id.GridView);
setAdapter(新的ImageAdapter(this));
setOnItemClickListener(新的OnItemClickListener()
{
公共无效MClick(AdapterView父级、,
视图v,内部位置,长id)
{   
//整数[]imageIDs=this.getImageIDs();
//点击这里的图片
整数[]imageIDs=this.getImageIDs();
//Toast.makeText(getBaseContext(),“pic”+(位置+1)+“selected”,Toast.LENGTH_SHORT).show();
//整数[]imageIDs=ImageAdapter.this.getImageIDs();
//对于(整数imageId:ImageAdapter.GetImageId()){
//System.out.println(imageId);
//}
}
});  
确保我能得到这个职位,但我不想使用那些使用if-else的教程
因为我认为如果不是这样的话,这将是一个漫长的过程。我在想,既然我有一个数组,为什么我不能用它来获取我想要的呢?你有两个选择,一个是面向对象的方法,另一个是使用受保护的/
访问修饰符创建一个getter,只需声明数组
公共
/
受保护
/
默认
而不是私有

这应该允许您访问扩展类中的数组。如果您只想访问扩展类的类中的数组,只需将数组或getter方法声明为受保护的

所以,你可以这样做:

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

    protected Integer[] getImageIDs()
    {
        return this.imageIDs;
    } 
}
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 );
            }
        }
    });
然后在你的拓展课上:

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 );
                //}
        }
    });  

上面的代码应该可以工作。从事件处理程序外部获取ID,并将数组声明为final,以便将其传递给负责事件处理的内部类,这一点很重要。

您将有两种选择,一种是面向对象的方式,创建一个getter,使用
public
/
protected
/
default
访问修饰符,或者只声明数组
public
/
protected
/
default
,而不是private

这应该允许您访问扩展类中的数组。如果您只想访问扩展类的类中的数组,只需将数组或getter方法声明为受保护的

所以,你可以这样做:

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

    protected Integer[] getImageIDs()
    {
        return this.imageIDs;
    } 
}
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 );
            }
        }
    });
然后在你的拓展课上:

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 );
                //}
        }
    });  

上面的代码应该可以工作。从事件处理程序外部获取ID,并将数组声明为final,以便将其传递给负责事件处理的内部类,这一点很重要。

使用公共getter方法处理
ImageID

for (Integer imageId : imageAdapter.getImageIDs()){
  System.out.println(imageId );
}
在特定索引处的访问id:

imageAdapter.getImageIDs()[i];  // i is index of array

将公共getter方法用于
图像ID

for (Integer imageId : imageAdapter.getImageIDs()){
  System.out.println(imageId );
}
在特定索引处的访问id:

imageAdapter.getImageIDs()[i];  // i is index of array

在“活动”中,使ImageID受到保护:

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

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

在活动中使ImageID受到保护:

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


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

是否要在listview或微调器上显示该图像数组?不,先生,我只想获取该数组列表,因为我需要存储在该数组上的特定值array@nick我已经做了,先生,你想在listview或微调器上显示图像数组吗?不,先生,我我只想得到数组的列表,因为我需要存储在上面的特定值array@nick我已经做了sir添加您的代码sir会给我一个错误getImageIDs无法解决或不是字段sir实际上我尝试创建的是当用户单击gridview中的图像时,我可以获得所选项目。请输入我的密码above@DELLicioso:是的,很抱歉,我的错误,我忘记在方法调用的末尾添加括号。它现在应该可以工作了。现在我收到了这个错误,先生“对于类型new AdapterView.OnItemClickListener(){}的方法getImageIDs()未定义”@DELLicioso:我从未做过android编程,但这很奇怪。。。如果在扩展另一个包含受保护getter的类的类中存在
onItemClick
方法,则错误不应出现。添加代码sir会导致错误getImageIDs无法解析或不是字段sir实际上,我试图创建的是当用户单击gridview中的图像时我可以得到所选的项目。请输入我的密码above@DELLicioso:是的,很抱歉,我的错误,我忘记在方法调用的末尾添加括号。它现在应该可以工作了。现在我收到了这个错误,先生“对于类型new AdapterView.OnItemClickListener(){}的方法getImageIDs()未定义”@DELLicioso:我从未做过android编程,但这很奇怪。。。如果
onItemClick
方法存在于扩展另一个包含受保护getter的类的类中,则该错误不应存在。使用该代码,我会收到一个错误,说明“无法从MedalsActivity.ImageAdapter类型静态引用非静态方法GetImageId()”,您无法调用
GetImageId()
从静态方法实际上,它建议我必须将getter设置为静态,但我认为这会导致很多错误使用该代码时,我会得到一个错误