多个if / else语句难题

时间:2016-08-13 16:56:09

标签: android if-statement

Newb问题。 所以,我正在制作可点击的文本部分,可以扩展和收缩以显示来自非常有用的教程的更多文本,但我仍然坚持最后一部分。文本部分有一个if / else语句,可以将内容从GONE切换为VISIBLE。但现在我正在尝试调整代码以包含更多其他语句,我无法弄清楚条件应该是什么。

    public class AlabamaActivity extends AppCompatActivity {

         TextView registration_info;
         TextView info2;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alabama);

    registration_info = (TextView)findViewById(R.id.registration_info);
    // hidden until its title is clicked
    registration_info.setVisibility(View.GONE);

    info2 = (TextView) findViewById(R.id.info2);
    info2.setVisibility(View.GONE);



    public void toggle_contents(View v) {

    if (registration_info.isShown()){
        Fx.slide_up(this, registration_info);
        registration_info.setVisibility(View.GONE);
    }
    else if (//?????){
        registration_info.setVisibility(View.VISIBLE);
        Fx.slide_down(this, registration_info);
    }

    else if (info2.isShown()){
        Fx.slide_up(this, info2);
        info2.setVisibility(View.GONE);
    }
    else if (//?????){
        info2.setVisibility(View.VISIBLE);
        Fx.slide_down(this, info2);
    }
    ...

这是我试图调整的原始if / else语句。

    public void toggle_contents(View v) {

    if (registration_info.isShown()){
        Fx.slide_up(this, registration_info);
        registration_info.setVisibility(View.GONE);
    }
    else {
        registration_info.setVisibility(View.VISIBLE);
        Fx.slide_down(this, registration_info);
    }

我在过去几个小时内尝试过试错,我上网的结果对于像我这样的新手来说有点多了。

另外,我一直在想我是否可以改用这个开关/箱子?

谢谢!

编辑---尽量不要笑笑

Fx代码

        public static void slide_down(Context ctx, View v) {

    Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_down);
    if (a != null) {
        a.reset();
        if (v != null) {
            v.clearAnimation();
            v.startAnimation(a);
        }
    }
}

public static void slide_up(Context ctx, View v){

    Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_up);
    if(a != null){
        a.reset();
        if(v != null){
            v.clearAnimation();
            v.startAnimation(a);
        }
    }
}
}

向下滑动

    <set xmlns:android="http://schemas.android.com/apk/res/android"
                    android:fillAfter="true">
    <scale
    android:duration="200"
    android:fromXScale="0.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toXScale="1.0"
    android:toYScale="1.0" />
    </set>

向上滑动

    <set xmlns:android="http://schemas.android.com/apk/res/android"
                       android:fillAfter="true">
    <scale
    android:duration="200"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toXScale="1.0"
    android:toYScale="0.0" />

   </set>

的xml:

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/Alabama">

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/registration"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Registration"
        android:textSize="20sp"
        android:clickable="true"
        android:onClick="toggle_contents"
        android:paddingLeft="16dp"
        android:paddingBottom="16dp"/>

    <!--content to hide/show -->
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/registration_info"
        android:text="info here"
        android:paddingLeft="16dp"
        android:paddingBottom="16dp"/>

    <TextView
        android:id="@+id/info2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Info2"
        android:textSize="20sp"
        android:clickable="true"
        android:onClick="toggle_contents"
        android:paddingLeft="16dp"
        android:paddingBottom="16dp"/>

    <!--content to hide/show -->
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/info2"
        android:text="info here"
        android:paddingLeft="16dp"
        android:paddingBottom="16dp"/>

1 个答案:

答案 0 :(得分:0)

这应该可以胜任,[现在]:

public void toggle_contents(View v) {

    // first set
    if (registration_info.isShown()){ 
        Fx.slide_up(this, registration_info);
        registration_info.setVisibility(View.GONE);
    } 
    else { 
        registration_info.setVisibility(View.VISIBLE);
        Fx.slide_down(this, registration_info);
    } 

    // second set
    if (info2.isShown()){ 
        Fx.slide_up(this, info2);
        info2.setVisibility(View.GONE);
    } 
    else { 
        info2.setVisibility(View.VISIBLE); 
        Fx.slide_down(this, info2); 
    } 

<强> [编辑]

根据您更新的帖子,我认为这应该足够了:

public void toggle_contents(View v) {

    if (v.isShown()){
        Fx.slide_up(this, v);
        v.setVisibility(View.GONE);
    }
    else {
        v.setVisibility(View.VISIBLE);
        Fx.slide_down(this, v;
    }

<强> [EDIT2]

因为,您将点击监听器附加到一个文本视图并展开/折叠另一个,切换案例似乎要走了:

public void toggle_contents(View v) {

    View childTV;

    switch(v.getId()) {
        case R.id.registration:
             childTV = findViewById(R.id.registration_info);

        // Can add more cases here
        default:
             childTV = findViewById(R.id.info2_child);
    }

    if (childTV.isShown()){ 
        Fx.slide_up(this, childTV);
        childTV.setVisibility(View.GONE);
    } 
    else { 
        childTV.setVisibility(View.VISIBLE);
        Fx.slide_down(this, childTV);
    } 

}

注意:目前,您的两个视图在xml中的ID为info2。我上面有一个虚拟id,你应该相应修复它。