質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

993閲覧

同一Activity再描画時にAndroid8だと右から左へ画面再描画となりチラつく

jun74

総合スコア338

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2019/08/18 09:25

前提・実現したいこと

既に開いている、同一Activity再描画時にAndroid8だと右から左へ画面再描画となりチラつくが
チラつかないようにする方法はないか?

該当のソースコード

java

1 // MainActivity再描画 2 Intent intent = new Intent(); 3 intent.setClassName("com.a.b", "com.a.b.MainActivity"); 4 context.startActivity(intent);

補足情報(FW/ツールのバージョンなど)

Android Studio3.4
API14から28対象でターゲットは28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/18 16:03

仕様じゃね? View を入れ替えるのが普通な気がするが
jimbe

2019/08/19 02:55

ご提示のコードは「再描画」では無いと思いますけど.
jun74

2019/08/19 12:53

>asahina1979様 https://akira-watson.com/android/fragment-fragment.html 使ったことはないのですが、上記よりViewとは「Fragment」を使った感じになるのでしょうか? 上記のページの動画より、遷移に関してはチラつきがなく良さそうです。 上記のページでは遷移して戻る感じですが、Aという「Fragment」を表示している状態で、Aを再描画は可能なのでしょうか? >jimbe様 MainActivityを実行している中で、その中のRecyclerViewのAdapter内でMainActivityを再度startActivityしている感じなのですが、これとは別にMainActivityを再描画の方法があるのでしょうか?
jimbe

2019/08/19 13:39

「再描画」といいますと invalidate 等による「無効化」からの再描画というのは通常あるかと思いますが, startActivity ですので... Activity をユーザーコードが再描画する必要があるという状況がピンときませんでした.
jun74

2019/08/19 14:27 編集

RecyclerView内のSwitchがオンになったものを上、オフになったものを下に他のキーも考慮して並び替えたく、RecyclerViewの行の比較をしながら並び替えるのも大変なので、Switchの状態をデータに書き出して、もう一度データを読み直してRecyclerViewを表示し直すのが理由でした。 https://teratail.com/questions/206795 上記により、Switch変更後にMainActivityに処理を戻すことが出来たので、データ読み直しとRecyclerView再設定、再表示で実現することはできました。 完成してみて、なんだか処理として邪道な気もするんですが。。 なので、この質問の回答は急がなくはなったのですが、今後何か使えるときがあったときのためにも何か方法があれば知りたいです。
jimbe

2019/08/19 14:40

RecyclerView は MainActivity で表示されているのでしょうか. ソートはスイッチの変更直後にリアルタイムに反映されるものなのでしょうか. それともスイッチを幾つか変更したら「並び替え」ボタンを押してソートするものでしょうか.
jun74

2019/08/19 14:42

RecyclerView は MainActivity で表示しています。 ソートはスイッチの変更直後にリアルタイム反映です。
jimbe

2019/08/19 14:51 編集

> RecyclerViewの行の比較をしながら並び替えるのも大変 並び替えるのは RecyclerView 上では無く, Adapter 内のデータです. Adapter 内では List でデータを保持していると思いますので, 余程不可思議なソートでなければ Comparator を書くだけかと思います. そして並び替えたデータを持つ Adapter を RecyclerView に setAdapter すれば(再)表示されると思うのですが, 如何でしょうか.
jimbe

2019/08/19 14:51

> ソートはスイッチの変更直後にリアルタイム反映です。 ソートに必要なデータが全て Adapter 内にあれば, (MainActivity は必要なく) Adapter 内で完結しそうに思います.
jun74

2019/08/19 15:40

ソートに必要なキー情報を表示用に編集してAdapterに渡しているので、そのままは無いかもです。。 listデータとしてスイッチ以外のキー情報も渡して置けば実現できそうですね。 https://java.keicode.com/lib/collections-sort.php Comparator は上記ページのようにすれば良いのですね。 邪道なまま行くか、直すべきか悩みます。。
jimbe

2019/08/19 15:53

[RecyclerView.AdapterでRecyclerView内のswitch変更時に並び順を変更する方法]( https://teratail.com/questions/206799 ) のアダプタを見たのですが, 個々の要素毎に ArrayList を持っているのではソートし難いのは当然です. private static class RowData { private Integer id; private Boolean sw_alarm; private String gozengogo; private String time; private String ampm; private String alarm_name; private String week; static List<RowData> convert(ArrayList<Integer> i_id, ArrayList<Boolean> i_sw_alarm, ArrayList<String> i_t_gozengogo, ArrayList<String> i_t_time, ArrayList<String> i_t_ampm, ArrayList<String> i_t_alarm_name, ArrayList<String> i_t_week) { List list = new ArrayList<RowData>(i_id.size()); for(int i=0; i<i_id.size(); i++) { RowData row = new RowData(); row.id = i_id.get(i); row.sw_alarm = i_sw_alarm.get(i); row.gozengogo = i_t_gozengogo.get(i); row.time = i_t_time.get(i); row.ampm = i_t_ampm.get(i); row.alarm_name = i_t_alarm_name.get(i); row.week = i_t_week.get(i); list.add(row); } return list; } } private List<RowData> rowDataList; public AlarmsAdapter(ArrayList<Integer> i_id, ArrayList<Boolean> i_sw_alarm, ArrayList<String> i_t_gozengogo, ArrayList<String> i_t_time, ArrayList<String> i_t_ampm, ArrayList<String> i_t_alarm_name, ArrayList<String> i_t_week){ this.rowDataList = RowData.convert(i_id, i_sw_alarm, i_t_gozengogo, i_t_time, i_t_ampm, i_t_alarm_name, i_t_week); } の RowData のように一行に当たるデータのクラスを用意し, それを List とすれば 1 つで済みますし, ソートもこのリストに行うだけです.
jimbe

2019/08/19 16:02

gozengogo と ampm は一方から一方が作れそうですし, そもそも日時を Date 型などで持っていれば time や week も纏められそうです. 保持するデータを最小限にすることで, アプリを軽く出来ます. 毎回文字列への変換をすると重いとお考えかもしれませんが, そのようなレベルの最適化は最終手段で, 構造の構築からされたほうが良いかと思います.
jun74

2019/08/19 16:15

rowDataList.remove(position)のみで、リストの全項目削除とかできるのですね。 目から鱗です。 MainActivityで渡す時点からRowDataで一纏めにした方が良さそうですね。。 まだ、理解しきれてなさそうなので上記について分からなくなったら、別に質問を作りたいと考えますので、また、よろしくお願いいたします。
jimbe

2019/08/19 16:25

> MainActivityで渡す時点からRowDataで一纏めにした方が良さそうですね その通りです. 上のコードでは呼び出し側の修正をしないで済むように変換メソッドを RowData に組み込みました. 各データの元はデータベースのようですので, SELECT の結果を受け取る時点で, データベースの 1 レコードを 1 RecordData オブジェクトにするような感じで List にし, RecordData の List を 表示用に RowData の List に変換して Adapter に渡す(もしくは RecordData の List を Adapter のコンストラクタに渡すと内部で Adapter の都合の良いように RowData の List に変換する)となると, 全体通して扱い易くなるかと思います.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問