我的 Activity 上有一个数组,其中包含在 a 中声明的 R.drawables 图像 公共(public)类 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
};
现在在扩展我的 Activity 的类(class)中,我如何调用该数组并获取特定值?很抱歉提出一个简单的问题,但我是这个 Android 开发的新手
编辑:
我忘了添加这个,一个获取数组长度的声明,它也存储在 ImageAdapter 类中
public int getCount() {
return imageIDs.length;
}
并为 getter 添加了这段代码
public Integer[] getImageIDs()
{
return this.imageIDs;
}
先生 这是我试图在我的其他扩展 Activity 类上创建的代码
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因为我认为这将是一个很长的时间。我在想的是,既然我有一个数组,为什么我不能用它来得到我要找的东西
最佳答案
您将有两个选择,要么是面向对象的方式,要么是使用 public
/protected
/default
访问修饰符创建 getter,或者否则,只需声明数组 public
/protected
/default
而不是 private。
这应该允许您访问扩展类中的数组。如果您只想访问扩展类的类中的数组,只需将数组或 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 );
//}
}
});
本身就是一个类(称为 Inner Class )。就编译器而言,您不再属于从您的 Activity 扩展的类中。这可以解释为什么编译器会这样提示: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 并将数组声明为最终数组很重要,这样它就可以传递给负责事件处理的内部类。
关于java - Android在其他类的数组上获取特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12067980/