Bütün düzəlişləri yeniləməni necə keçirmək olar?

Əsas laymanın qaynaq görünüşünü, demək olar ki, Activity.onResume () metodunu yenidən tərtib etmək / güncəlləşdirmək üçün məcbur etmək istəyirəm. Bunu necə edə bilərəm?

Əsas layout görünümünde, mənim Activity.onCreate () adlı bir ("R.layout.mainscreen" aşağıda) deməkdir, məsələn: -

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainscreen); } 
133
13 мая '11 в 15:39 2011-05-13 15:39 MickeyR 13 may 2011-ci il saat 15: 39-da təyin olunur
@ 13 cavab

Suala ciddi şəkildə cavab vermək üçün: invalidate () istifadə edin:

public void invalidate () Bu yana: API səviyyəsi 1

Bütün görünüşü etibarsızdır. Görünüş görünsə, onDraw (Canvas) gələcəkdə bir nöqtədə çağırılacaq. Bu istifadəçi interfeysi ipindən çağırılmalıdır. UI-dən başqa bir mövzuya zəng etmək üçün, postInvalidate () çağırın.

 ViewGroup vg = findViewById (R.id.mainLayout); vg.invalidate(); 

İndi fəaliyyət bərpa edildikdə, hər bir baxış özüdür. No invalidate () zəng tələb olunur. Bir mövzu tətbiq etmək üçün, hər hansı bir görünüş tərtib olunmadan əvvəl bunu etdiyinizə əmin olun, yəni. setContentView(R.layout.mainscreen); əvvəl setContentView(R.layout.mainscreen);

public void setTheme (int qalıq) üçün: API səviyyəsi 1

Bu məzmun üçün əsas mövzunu seçin. Bu kontekstdə (məsələn, setContentView (View) və ya şişirmək (int, ViewGroup) çağırmadan əvvəl) görünməmişdən əvvəl bu çağırılmalıdır.

API sənədinə link burada mövcuddur: http://developer.android.com/conference/android/view/ContextThemeWrapper.html#setTheme%28int%29

OnDraw () metodu artıq yaradılmış görünüşlərlə işlədiyindən setTheme işləməyəcəkdir. Mövzu ilə heç bir təcrübəm yoxdur, amma iki alternativ düşünə bilərəm:

  • Bunun yerinə onCreate () ilə setTheme çağırın və ya
  • setContentView (R.layout.mainscreen) redo; bütün planların bərpa olunmasını məcbur etməkdir.
122
13 мая '11 в 15:48 2011-05-13 15:48 Aleadam tərəfindən 13 May 'da 15:48' də verilmiş cavab 2011-05-13 15:48

getWindow().getDecorView().findViewById(android.R.id.content).invalidate(); edin getWindow().getDecorView().findViewById(android.R.id.content).invalidate();

border=0
28
13 мая '11 в 15:48 2011-05-13 15:48 cavab 13.05.2011 tarixində 15:48 2011-05-13 15:48 klaviatura ilə verilir

Yenidən qurmağa cəhd edin (), bu, bu Fəaliyyətin yenidən yaranmasına səbəb olacaq.

16
07 мая '14 в 15:31 2014-05-07 15:31 Mohanad ALKHOULI tərəfindən 07 May '14 'də saat 15:31' də cavab verildi 2014-05-07 15:31

Həll:

Uşaqlar bütün həllərinizi sınadınız , amma onlar mənim üçün işləmirdilər , EditText-dən setVisibility -ni VISIBLE- ə çevirmək lazım idi və bu EditText görünən və sonra ScrollView -da olmalıdır , amma effektiv olması üçün root rejimini yeniləməyəm. Görünüşü yeniləmək üçün lazım olduğum zaman problemimi həll etdim, buna görə ScrollView-in görünürlüğünü GONE-ə dəyişdim və sonra onu effektiv etmək üçün yenidən VISIBLE-ə qurdum və mənim üçün çalışdı. Bu dəqiq bir həll deyil, amma yalnız çalışır.

  private void refreshView(){ mScrollView.setVisibility(View.GONE); mScrollView.setVisibility(View.VISIBLE); } 
12
03 нояб. Cavab Naveed Ahmad tərəfindən verildi 03 noyabr. 2015-11-03 19:50 '15 saat 19:50 'da, 2015-11-03 19:50

Kök postInvalidate() invalidate() və ya postInvalidate() uşaqların görünüşlərinin yenidən tərtib olunacağına zəmanət vermir. Mənim xüsusi vəziyyətdə, mənim kök layout TableLayout idi və Cədvəl Row sinif və TextView bir neçə uşaq idi. Root TableLayout obyektində postInvalidate() və ya requestLayout() və ya requestLayout() forceLayout() mətn elementlərinin yenidən düzəldilməsinə səbəb olmadı.

Beləliklə, mən başa düşdüm ki, bu TextViews üçün axtarış edən layoutun təkrarlanan ayrılması və sonra bu TextView obyektlərinin hər biri üçün postInvalidate() çağırır.

Kod, GitHub'da tapa bilərsiniz: https://github.com/jkincali/Android-LinearLayout-Parser

8
30 нояб. 30 noyabr jkincali tərəfindən verilmiş cavab 2014-11-30 00:10 '14 'də 0:10 2014-11-30 00:10

Əks təqdirdə də bunu edə bilərsiniz -

 ViewGroup vg = (ViewGroup) findViewById (R.id.videoTitleTxtView); vg.removeAllViews(); vg.refreshDrawableState(); 
8
13 мая '11 в 16:09 2011-05-13 16:09 Cavab Datta Kunde tərəfindən 13 may 2011-ci il saat 16: 00-da verilir. 2011-05-13 16:09

Mövzu ilə bağlı məsələni həll edin:

 @Override public void onBackPressed() { NavUtils.navigateUpTo(this, new Intent(this, MyNeedToBeRefreshed.class)); } 
4
26 февр. Cavab Krilivye verildi 26 Fevral. 2013-02-26 23:26 '13 saat 23:26 2013-02-26 23:26

Yalnız onresume-də məzmunu görüntüləyin

setContentView (R.layout.yourview) daxilindəResume ..

Məsələn:

 @Override public void onResume(){ super.onResume(); setContentView(R.layout.activity_main); postIncomeTotals(); } 
3
06 нояб. Cavab Farhan 06 noyabr tarixində verilir. 2011-11-06 10:29 '11 at 10:29 2011-11-06 10:29

Mən də bu problemi oldum, amma Farhan'ın setContentView () istifadə edildikdən sonra mən bunu etdim. setContentView () istifadə edərək, kifayət deyil. Bütün fikirlərimi informasiya ilə doldurmaq üçün lazım olduğunu gördüm. Bunu düzəltmək üçün sadəcə başqa bir üsuldan bu kodun hamısını çıxardı (mən bunu montaj adlandırdım) və onCreate üsulumda sadəcə bu məclis çağırıram. İndi hadisəm meydana gəldiyində, fəaliyyətimi "yeniləşdirməli" olmasını istəyirəm, yalnız məclis çağırıram, yeni məlumat verəcəyəm (toplantı parametrləri kimi qəbul edirəm) və yenilənmiş fəaliyyətim var.

2
07 мая '14 в 15:22 2014-05-07 15:22 cavab 07 may 2014 tarixində 15:22 2014-05-07 15:22 istifadəçi tərəfindən verilir
 Intent intent = getIntent(); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); startActivity(intent); 

Bu, mövzu dəyişikliklərini yenidən yükləmək və animasiyaların gizlədilməsinə imkan verir.

2
06 янв. Cavab Codeversed Jan 06 tərəfindən verilir 2016-01-06 19:30 '16 saat 19:30 'da 2016-01-06 19:30

Bu bilinməyən bir səhv görünür.

2
13 мая '11 в 17:04 2011-05-13 17:04 cavab Ben Williams tərəfindən 13 may 2011-ci il saat 17: 00-da verilir. 2011-05-13 17:04

Mənim düzeni yeniləmişəm

 Intent intent = getIntent(); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); startActivity(intent); 
0
04 окт. Cavab siva35 04 oktyabr verilir . 2016-10-04 12:52 '16 at 12:52 2016-10-04 12:52

Təhlükəsiz olub-olmadığını bilmirəm, amma mənim üçün çalışdı. Mən bu problemə özümə qaçıb requestLayout()requestLayout() , lakin heç bir fayda vermədi. Beləliklə, yenə də yenidən və yenidən onCreate(null) çağırıb. Təhlükəsiz olmasa, mənə bildirin. Ümid edirəm ki, kimsə orada kömək edir.

0
10 апр. Cavab Cai 10 Apr verilir 2015-04-10 17:27 '15 at 17:27 2015-04-10 17:27

bağlı digər suallar və ya sual verin