Android - 查找ImageView然后设置其可见性

时间:2018-03-05 20:49:30

标签: java android android-studio

我有一个ImageViews(10x10)的网格,它们是星星。我试图随机化一个坐标,然后让那个星可见。我的MainActivity的XML是:

<TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:visibility="invisible">

        <ImageView
            android:id="@+id/star_a1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:visibility="invisible"
            app:srcCompat="@android:drawable/btn_star_big_on" />

        <ImageView
            android:id="@+id/star_b1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:visibility="invisible"
            app:srcCompat="@android:drawable/btn_star_big_on" />

        <ImageView
            android:id="@+id/star_c1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:visibility="invisible"
            app:srcCompat="@android:drawable/btn_star_big_on" />

等。我已将可见性设置为不可见。为了找到ID然后改变可见性,我做了:

int starID = getResources().getIdentifier(coord, "id", getPackageName());
ImageView target = (ImageView)findViewById(starID);
target.setVisibility(View.VISIBLE);

然而,在运行我的应用程序时,我收到错误

Caused by: java.lang.NullPointerException
                  at com.example.localadmin.myapplication1.MainActivity.OnClick(MainActivity.java:73)

第73行是&#34; target.setVisibility(View.VISIBLE);&#34;。

有人可以帮忙吗?提前致谢

1 个答案:

答案 0 :(得分:1)

您可以像这样

在静态数组中跟踪View ID
static int[] stars = {
        R.id.star_a1, R.id.star_b1, R.id.star_c1,
        R.id.star_a2, R.id.star_b2, R.id.star_c2   // as many ids as you need...
};

然后你可以选择一个随机星并像这样设置它的可见性

int index = new Random().nextInt(stars.length);         // choose a random array index
int id = stars[index];                                  // grab the element from the array
ImageView chosenStar = (ImageView) findViewById(id);    // find the right view
chosenStar.setVisibility(View.VISIBLE);                 // make the chosen view visible

当然可以用更少的代码行完成,但我想让每一步都清楚。另一件事:我认为你不应该让你的xml布局中的表行不可见。然后你的随机明星应该出现了!