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

标签 java android

我的 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/

相关文章:

android - AppCompat 抽屉导航不让我关注任何 EditText

java - Androidx 导航 View - `setNavigationItemSelectedListener` 不起作用

java - 构建可执行 JAR 有什么好处

java - 从一个 Realm 异步复制到另一个 Realm

java - Java 中的类加载与对象创建

Java 扫描器最佳实践

android - android 4.0下的奇怪异常与eclipse

android - 应用程序类中的服务执行 Web 套接字连接崩溃

Java 同步问题 - 主线程被协程实现锁定

java - 如何从服务器获取客户端套接字的确认?