2016-03-04 4 views
0

Мне нужно создать один фрагмент, как показано ниже.Настройка видимости виджетов, когда два виджета один над другим

Нажатие на Need Cash TextView будет изменить содержащий макет, который будет иметь две кнопки Cancel & Meet и переключение между этими видами.

Но когда я нажимаю на Need Cash call toggleVisibility(), функция делает Need Cash невидимым, но не показывает Cancel | Meet.

Какие ошибки я делаю в этом процессе?

|----------------------|  =>  |----------------------| 
|      |  =>  |      | 
|      |  =>  |      | 
|      |  =>  |      | 
|      |  =>  |      | 
|      |  =>  |      | 
|      |  =>  |      | 
|      |  =>  |      | 
|      |  =>  |      | 
|      |  =>  |      | 
|      |  =>  |      | 
|----------------------|  =>  |----------------------| 
|  Need Cash  |  =>  | Cancel | Meet  | 
|----------------------|  =>  |----------------------| 







@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.tv_need_cash: 
       toggleVisibility(); 
      break; 
     case R.id.tv_need_cash_cancel: 
      toggleVisibility(); 
      Toast.makeText(getActivity(), "tv_need_cash_cancel", Toast.LENGTH_SHORT).show(); 
      break; 

     case R.id.tv_need_cash_lets_meet: 
      toggleVisibility(); 
      Toast.makeText(getActivity(), "tv_need_cash_lets_meet", Toast.LENGTH_SHORT).show(); 
      break; 
    } 
} 

public void toggleVisibility() { 
    if(needCashTv.getVisibility() == View.VISIBLE) { 
     //needCashTv.setEnabled(false); 
     needCashTv.setVisibility(View.GONE); 
     frameForNeedCashStuff.bringToFront(); 

     frameForNeedCashStuff.setVisibility(View.VISIBLE); 
     //cancelNeedCashTv.setEnabled(true); 
     cancelNeedCashTv.setVisibility(View.VISIBLE); 
     //letsMeetneedCashTv.setEnabled(true); 
     letsMeetneedCashTv.setVisibility(View.VISIBLE); 
    } 
    else { 
     //needCashTv.setEnabled(true); 
     needCashTv.setVisibility(View.VISIBLE); 
     needCashTv.bringToFront(); 

     frameForNeedCashStuff.setVisibility(View.GONE); 
     //cancelNeedCashTv.setEnabled(false); 
     cancelNeedCashTv.setVisibility(View.GONE); 
     //letsMeetneedCashTv.setEnabled(false); 
     letsMeetneedCashTv.setVisibility(View.GONE); 
    } 
    thisView.invalidate(); 
} 


.....................OTHER WIDGETS ABOVE...................... 
<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="56dp" 
    android:layout_alignParentBottom="true" 
    android:id="@+id/frameForNeedCashStuff"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:visibility="gone"> 
     <TextView 
      android:layout_width="200dp" 
      android:layout_height="@dimen/abc_action_bar_default_height_material" 
      android:layout_alignParentLeft="true" 
      android:background="@color/ColorPrimary" 
      android:gravity="center" 
      android:id="@+id/tv_need_cash_cancel" 
      android:text="@string/button_cancel" 
      android:textSize="@dimen/text_sizes_small" 
      android:textColor="@color/White" 
      android:visibility="gone"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/abc_action_bar_default_height_material" 
      android:layout_alignParentRight="true" 

      android:background="@color/ColorPrimary" 
      android:gravity="center" 
      android:id="@+id/tv_need_cash_lets_meet" 
      android:text="Let's Meet" 
      android:textSize="@dimen/text_sizes_small" 
      android:textColor="@color/White" 
      android:visibility="gone"/> 
    </RelativeLayout> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/abc_action_bar_default_height_material" 
     android:background="@color/ColorPrimary" 
     android:layout_alignParentBottom="true" 
     android:gravity="center" 
     android:id="@+id/tv_need_cash" 
     android:text="@string/need_cash" 
     android:textSize="@dimen/text_sizes_small" 
     android:textColor="@color/White" 
     android:visibility="visible" /> 
</RelativeLayout> 
.....................OTHER WIDGETS BELOW...................... 

EDIT

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View thisView = inflater.inflate(R.layout.fragment_map, container, false); 
return thisView; 
} 

EDIT 2

вид Фрагмент до щелчка, который показывает Защищающий Cash TextView

Fragment view before clicking which is showing the Keep Cash TextView

0 вид

Фрагмент после щелчка, который не показывает 'Отмена' и TextViews 'Знакомства'

Fragment view after clicking which is NOT showing the 'Cancel' and 'Meet' TextViews

** EDIT 3 ** Учитывая идентификатор для внешней RelativeLayout и признан недействительным его

public void toggleVisibility() { 
     if(needCashTv.getVisibility() == View.VISIBLE) { 
      //needCashTv.setEnabled(false); 
      needCashTv.setVisibility(View.GONE); 

      frameForNeedCashStuff.setVisibility(View.VISIBLE); 
      //cancelNeedCashTv.setEnabled(true); 
      cancelNeedCashTv.setVisibility(View.VISIBLE); 
      //letsMeetneedCashTv.setEnabled(true); 
      letsMeetneedCashTv.setVisibility(View.VISIBLE); 
      frameForNeedCashStuff.bringToFront(); 
     } 
     else { 
      //needCashTv.setEnabled(true); 
      needCashTv.setVisibility(View.VISIBLE); 
      needCashTv.bringToFront(); 

      frameForNeedCashStuff.setVisibility(View.GONE); 
      //cancelNeedCashTv.setEnabled(false); 
      cancelNeedCashTv.setVisibility(View.GONE); 
      //letsMeetneedCashTv.setEnabled(false); 
      letsMeetneedCashTv.setVisibility(View.GONE); 
     } 
     ((ViewGroup)frameForNeedCashStuff2.getParent()).invalidate(); 
     //thisView.invalidate(); 
    } 

Рабочий код после исправления EDIT 4

public void toggleVisibility() { 
    if(needCashTv.getVisibility() == View.VISIBLE) { 
     needCashTv.setVisibility(View.GONE); 

     frameForNeedCashStuff2.setVisibility(View.VISIBLE); 
    } 
    else { 
     needCashTv.setVisibility(View.VISIBLE); 
     needCashTv.bringToFront(); 

     frameForNeedCashStuff2.setVisibility(View.GONE); 
    } 
    ((ViewGroup)frameForNeedCashStuff.getParent()).invalidate(); 
} 


<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="56dp" 
    android:layout_alignParentBottom="true" 
    android:id="@+id/frameForNeedCashStuff"> 

    <RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="56dp" 
    android:visibility="gone" 
    android:id="@+id/frameForNeedCashStuff2"> 
    <TextView 
     android:layout_width="200dp" 
     android:layout_height="@dimen/abc_action_bar_default_height_material" 
     android:layout_alignParentLeft="true" 
     android:background="@color/ColorPrimary" 
     android:gravity="center" 
     android:id="@+id/tv_need_cash_cancel" 
     android:text="@string/button_cancel" 
     android:textSize="@dimen/text_sizes_small" 
     android:textColor="@color/White"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="@dimen/abc_action_bar_default_height_material" 
     android:layout_alignParentRight="true" 

     android:background="@color/ColorPrimary" 
     android:gravity="center" 
     android:id="@+id/tv_need_cash_lets_meet" 
     android:text="Let's Meet" 
     android:textSize="@dimen/text_sizes_small" 
     android:textColor="@color/White"/> 
    </RelativeLayout> 

    <TextView 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/abc_action_bar_default_height_material" 
    android:background="@color/ColorPrimary" 
    android:layout_alignParentBottom="true" 
    android:gravity="center" 
    android:id="@+id/tv_need_cash" 
    android:text="@string/need_cash" 
    android:textSize="@dimen/text_sizes_small" 
    android:textColor="@color/White" 
    android:visibility="visible" /> 
</FrameLayout> 
+0

Можете ли вы попытаться аннулировать родительский вид, а не фактический вид. ((ViewGroup) getParent()). Invalidate(); –

+0

@bastienpinaquy Можете ли вы подтвердить, чей родительский вид, макет или виджетов. – dearvivekkumar

+0

Пробовал это '((ViewGroup) frameForNeedCashStuff.getParent()). Invalidate();' но все еще сталкивается с той же проблемой. – dearvivekkumar

ответ

0

Ваш RelativeLayout обертывание TextView с (tv_need_cash_cancel и tv_need_cash_lets_meet установлен в «ушел».

Он никогда не будет отображаться, если вы просто переключите видимость видений ребенка.

Также вы уверены, что вам нужен View.invalidate()? Если вы просто переключаете видимость, это необязательно.

+0

вызов thisView.invalidate(); – dearvivekkumar

+0

thisView на самом деле ссылка на изображение, возвращаемая надувным устройством – dearvivekkumar

+0

Вы проверили, что он на самом деле делает для вас? Я действительно не думаю, что это необходимо. И вы пытались установить «RelativeLayout» на видимое, как я предложил? –

Смежные вопросы