ScrollView onclick将可见性设置为Visible

时间:2015-02-25 22:32:25

标签: java android xml scrollview

我在我的Android应用程序中得到了这个Scroll View,我想要做的是将其可见性设置为消失。当您单击具有id clickme的此按钮时,它应更改滚动视图的可见性并将其设置为Visible。然而,当我尝试这样做时,我收到了错误的标语"不幸的是,ExampleApp已停止"。基本上是崩溃了。 这是我的按钮代码;

<Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/lastmonth"

                android:id="@+id/lastmonth"
                android:layout_marginLeft="40dp"
                android:paddingLeft="40dp"
                android:textSize="14sp" />

            <Button

这是滚动视图的代码

<ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/scrollview"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:layout_marginTop="5dp">

<LinearLayout
                android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/scrollvisibility">

<LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent">

<TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/exampletext"
                        android:id="@+id/textView10"
                        android:textColor="#ff010101"
                        android:textSize="14sp" />

</LinearLayout>

  </LinearLayout>
        </ScrollView>

这是我在活动中获得的代码;

final View v = null;

 v.findViewById(R.id.scrollvisibility).setVisibility(View.GONE);


v.findViewById(R.id.lastMonthButton).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i("Testing","Button Clicked");
            //v.findViewById(R.id.scrollvisibility).setVisibility(View.VISIBLE);
        }
    });

2 个答案:

答案 0 :(得分:2)

从与OP的调试会话 - 错误现在看来很清楚! onClickListener onClick方法只是覆盖当前的片段视图,所以当使用v.findViewById()时 - 它使用了错误的视图。

v.findViewById(R.id.lastMonthButton).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i("Testing","Button Clicked");
            v.findViewById(R.id.scrollvisibility).setVisibility(View.VISIBLE);
        }
    });

修复方法是重命名onClick(View v) -> onClick(View view)或实例化View scroller = v.findViewById(R.id.scrollvisibility);并从onClick()

中访问该对象

答案 1 :(得分:0)

正如codeMagic指出的那样,您设置了final v = null,这意味着您将获得NullPointerException

要访问该按钮,请使用Button b = (Button) findViewById(R.id.lastMonthButton); 然后,您可以根据需要设置可见性。

此外,在onClick方法中,按钮可以作为b访问,因为它是在包含它的方法中声明的。

编辑: 第二个LinearLayout无法完成任何操作,我认为您可以直接在ScrollView设置可见性,而不是只隐藏LinearLayout