я создал первый подход с использованием framelayout следующим образом:
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="70dp"
android:onClick="rotate">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@+id/view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2">
<Button
android:id="@+id/button"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@color/colorPrimary" />
<Button
android:id="@+id/button2"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@color/colorAccent" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:text="Button text"
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
android:textColor="@android:color/white" />
</FrameLayout>
для вращения любого представления создайте файл anim.xml в папке anim
в res
right click
на res
-> new android res dir
-> выберите anim
, затем создайте анимированный файл, щелкните правой кнопкой мыши на папке anim
, которую вы только что создали, и new anim res file
, а затем вставьте код в боковую часть, это повернет ваш фрейм-макет в этом определенном коде на 180 градусов [1112 ]
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<rotate
android:duration="500"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="180" />
</set>
используйте его как следовать на kotlin
fun rotate(view: View) {
val rotate = AnimationUtils.loadAnimation(
applicationContext,
R.anim.rotate
)
frame.startAnimation(rotate)
}
Нет нескольких сессий между нормальными загрузками страницы ASP.NET, обратными передачами и Ajax ASP.NET частичные обратные передачи. Я могу сказать Вам это с уверенностью.
Вместо того, чтобы хранить строку поиска на сессии, как насчет того, чтобы просто использовать содержание поискового TextBox непосредственно? Я не могу думать ни о какой причине, почему необходимо было бы переставить ее вокруг, так как это будет доступно в течение всего жизненного цикла страницы так или иначе.
Наконец, относительно Ваших требований... Используя UpdatePanel не выполняет требование, чтобы Ваши пользователи смогли использовать другую функциональность на странице, если та функциональность также повышает частичные обратные передачи. Только одна частичная обратная передача может произойти за один раз. Если другое событие будет сгенерировано, в то время как Ваш поиск происходит, поисковый запрос будет отменен без любого уведомления.
Используя метод страницы или веб-сервис для поиска было бы намного более быстрое, более легкое, и больше устойчивого способа сделать его. Я обычно не включаю свой собственный сайт, но я думаю, что несколько моих сообщений точно относятся для того, что Вы делаете:
Вы могли использовать пользовательский элемент управления для рендеринга результатов поиска через веб-сервис (намного быстрее, чем UpdatePanel): http://encosia.com/2008/02/05/boost-aspnet-performance-with-deferred-content-loading/
Или, Вы могли возвратить результаты поиска как JSON и рендеринг что на стороне клиента (еще быстрее): http://encosia.com/2008/06/26/use-jquery-and-aspnet-ajax-to-build-a-client-side-repeater/
Любой из тех методов мог вынуть Вашу функциональность поиска из частичной парадигмы обратной передачи, так, чтобы это работало быстрее, использовало меньше пропускной способности и ресурса сервера, и не устраняло другое действие UpdatePanel от появления одновременно.
Просто другая мысль, я всегда сталкивался с проблемами с updatepanel и предпочитаю писать свой атлас ajax запросы через библиотеку непосредственно, с помощью PageMethods. Вы имеете больше контроля над тем, что Вы отправляете и получаете. UpdatePanel отправляет всю страницу и получает всю иерархию управления страницей, затем он анализирует, что 'ново' и дисплеи это.
Править: Каков код, который Вы используете для сохранения критериев к сессии? И у Вас есть код в методе, который на самом деле проверяет, чтобы видеть, имеет ли сессия некоторые сохраненные критерии и пасует назад это вместо этого? Возможно, вот почему 2-е/3-и updatepanel обратные передачи возвращают первый набор критериев вместо ожидаемых результатов? Как в стороне, я знаю от выполнения некоторого тяжелого атласа ajax вещи, что существует определенно не, две сессии (один для нормальной обратной передачи, один для асинхронного) там шанс, Вы используете веб-ферму?
Редактирование № 2: Я не смог бы записать то, что я записал выше (первый параграф), если я не был поклонником кого-то, кто ответил также: https://stackoverflow.com/users/60/dave-ward
Необходимо установить свойство EnableSession атрибута WebMethod для функции, которую Вы вызываете.
[WebMethod( EnableSession=true )]
public static void DoSomething(){
/// ....
}
Если вы используете общие обработчики .ashx, просто наследуйте от интерфейса IRequiresSessionState
public class ActionRequest : IHttpHandler, IRequiresSessionState
{
}