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

时间:2012-08-22 07:11:30

标签: java android

我的Activity上有一个数组,其中包含在a中声明的R.drawables图像 公共类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 );
                //}
        }
    });  

看到我可以获得该职位,但我不想使用if else使用这些教程 Tutorial Here因为我认为这将是一个漫长的过程。我在想的是,因为我有一个数组,为什么我不能用它来得到我想要的东西

3 个答案:

答案 0 :(得分:1)

您将有两个选项,以面向对象的方式,并使用public / protected / default访问修饰符创建一个getter,否则,只需声明数组{{1 } / public / protected而不是私人。

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

所以,你可以这样做:

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

本身是一个类(称为Inner Class)。就编译器而言,您不再属于从您的活动扩展的类。这可以解释为什么编译器会这样抱怨: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(){}

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

答案 1 :(得分:0)

imageIDs使用公共getter方法:

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

在特定索引处访问id:

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

答案 2 :(得分:0)

在您的活动中,make imageID受到保护:

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

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