Мне нужно создать один фрагмент, как показано ниже.Настройка видимости виджетов, когда два виджета один над другим
Нажатие на 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
0 видФрагмент после щелчка, который не показывает 'Отмена' и 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>
Можете ли вы попытаться аннулировать родительский вид, а не фактический вид. ((ViewGroup) getParent()). Invalidate(); –
@bastienpinaquy Можете ли вы подтвердить, чей родительский вид, макет или виджетов. – dearvivekkumar
Пробовал это '((ViewGroup) frameForNeedCashStuff.getParent()). Invalidate();' но все еще сталкивается с той же проблемой. – dearvivekkumar