我的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因为我认为这将是一个漫长的过程。我在想的是,因为我有一个数组,为什么我不能用它来得到我想要的东西
答案 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 = {
...
};
您可以从扩展活动的课程中访问它。