전체 레이아웃 보기 새로 고침을 강제로 적용하는 방법은 무엇입니까?
기본 레이아웃 리소스 보기를 강제로 다시 그리거나 새로 고칩니다(예: Activity.onResume() 메서드).어떻게 해야 하나요?
메인 레이아웃 보기는 다음과 같이 내 Activity.onCreate()에서 호출되는 것('R.layout.mainscreen')을 의미합니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainscreen);
}
질문에 엄격하게 대답하기:유효하지 않음() 사용:
public void 무효화() 이후: API 레벨 1
전체 보기를 무효화합니다.보기가 표시되면 나중에 OnDraw(Canvas)가 호출됩니다.UI 스레드에서 호출해야 합니다.UI가 아닌 스레드에서 호출하려면 postInvalidate()를 호출합니다.
ViewGroup vg = findViewById (R.id.mainLayout);
vg.invalidate();
이제 활동이 다시 시작되면 모든 보기가 자동으로 그려집니다.무효화()를 호출할 필요가 없습니다.테마를 적용하려면 보기가 그려지기 전에, 즉 보기가 그려지기 전에 이 작업을 수행해야 합니다.setContentView(R.layout.mainscreen);
공실 세트테마(내부) 시작: API 레벨 1
이 컨텍스트의 기본 테마를 설정합니다.컨텍스트에서 보기를 인스턴스화하기 전에(예를 들어 setContentView(View) 또는 bullet(Int, ViewGroup)을 호출하기 전에) 호출해야 합니다.
API 문서 참조는 다음과 같습니다. http://developer.android.com/reference/android/view/ContextThemeWrapper.html#setTheme%28int%29
onDraw() 메서드는 이미 인스턴스화된 보기에서 작동하므로 setTheme는 작동하지 않습니다.저는 주제에 대한 경험이 없지만, 제가 생각할 수 있는 두 가지 대안은 다음과 같습니다.
- 통화 세트대신에 Create()에 있는 테마 또는
- redo setContentView(R.layout.mainscreen); 모든 레이아웃을 강제로 다시 인스턴스화합니다.
해라getWindow().getDecorView().findViewById(android.R.id.content).invalidate();
해라recreate()
이 활동이 다시 생성됩니다.
솔루션:
여러분, 저는 당신의 모든 솔루션을 시도해 보았지만 저를 위해 작동하지 않았습니다. 편집 텍스트의 가시성을 표시로 설정해야 하고 이 편집 텍스트가 ScrollView에 표시되어야 하지만 루트 보기를 새로 고칠 수 없었습니다.보기를 새로 고쳐야 할 때 문제를 해결하여 ScrollView 가시성을 Gone으로 변경한 다음 VISCOBLE로 다시 설정하여 적용했습니다.이것은 정확한 해결책은 아니지만 효과가 있었습니다.
private void refreshView(){
mScrollView.setVisibility(View.GONE);
mScrollView.setVisibility(View.VISIBLE);
}
부르기invalidate()
또는postInvalidate()
루트 레이아웃에서는 하위 뷰가 다시 그려지는 것을 보장하지 않습니다.특정한 경우, 루트 레이아웃은 TableLayout이었고 TableRow 및 TextView 클래스의 자식이 여러 명 있었습니다.부르기postInvalidate()
또는requestLayout()
아니 심지어는forceLayout()
루트 TableLayout 개체에서 레이아웃의 TextView가 다시 그려지지 않았습니다.
된은 그 를 찾기 위해 에 "TextViews"라고 부르는 것이었습니다.postInvalidate()
각 TextView 개체에서 사용할 수 있습니다.
코드는 GitHub: https://github.com/jkincali/Android-LinearLayout-Parser 에서 확인할 수 있습니다.
그렇지 않으면 이것도 시도해 보세요
ViewGroup vg = (ViewGroup) findViewById (R.id.videoTitleTxtView);
vg.removeAllViews();
vg.refreshDrawableState();
사용해 보세요.
view.requestLayout();
한 번의 이력서에 컨텐츠 보기를 설정하기만 하면 됩니다.
setContentView(R. 레이아웃).사용자의 의견)을 확인할 수 있습니다.
예:
@Override
public void onResume(){
super.onResume();
setContentView(R.layout.activity_main);
postIncomeTotals();
}
주제 문제에 대한 다음 해결 방법을 시도합니다.
@Override
public void onBackPressed() {
NavUtils.navigateUpTo(this, new Intent(this,
MyNeedToBeRefreshed.class));
}
Intent intent = getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
startActivity(intent);
이렇게 하면 테마 변경 내용을 다시 로드하고 애니메이션을 숨길 수 있습니다.
저도 이 문제를 겪고 있었지만 파한의 선례를 따라 사용했습니다.setContentView()
저는 바로 그것을 했습니다.사용.setContentView()
하지만 그 자체로는 충분하지 않았습니다.저는 제 모든 견해를 정보로 다시 채워야 한다는 것을 알게 되었습니다.과 제 이문를해빌위기으저다방른법는해로다코 (드모고불렀다니빼습냈라두드를결하제)에서 그 .onCreate
내가 그냥 그 빌드라고 부르는 방법.이벤트가 발생할 때마다 활동이 "새로 고침"되기를 원할 때마다 빌드를 호출하고 새 정보를 제공합니다(구축할 매개 변수로 전달). 그러면 활동이 새로 고쳐집니다.
이것은 알려진 버그로 보입니다.
이것이 안전한지 아닌지는 모르겠지만 저에게는 효과가 있었습니다.도 이 시도해본 적이 있습니다.invalidate()
그리고.requestLayout()
하지만 소용이 없습니다.그래서 그냥 전화했어요.onCreate(null)
처음부터 다시 시작했고 효과가 있었습니다.만약 이것이 안전하지 않다면 저에게 알려주세요.이것이 누군가에게 도움이 되길 바랍니다.
이것이 내가 레이아웃을 새로 고치는 방법입니다.
Intent intent = getIntent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
startActivity(intent);
사용자 정의 뷰를 작성하려면 SurfaceView를 확장하고 있는지 확인한 후 메서드로 다시 그릴 수 있습니다.getHolder().lockCanvas()
다음은 예입니다.
Canvas c = getHolder().lockCanvas();
c.drawText("Text", x, y, paint);
getHolder().unlockCanvasAndPost(c);
parent.invalidate()는 parent.requestLayout() 없이는 작동하지 않습니다. 따라서,
parent.invalidate()
container.requestLayout()
이것이 좋은 접근법인지는 잘 모르겠지만 매번 이렇게 부릅니다.
setContentView(R.layout.mainscreen);
의도를 사용하여 활동 자체를 다시 호출합니다.예를 들어, 기본 활동의 레이아웃을 새로 고치려면 다음과 같이 하십시오.
startActivity(new Intent(MainActivity.this, MainActivity.class));
언급URL : https://stackoverflow.com/questions/5991968/how-to-force-an-entire-layout-view-refresh
'programing' 카테고리의 다른 글
PowerShell을 사용하여 호스트 이름에서 IP 주소 확인 (0) | 2023.08.26 |
---|---|
텍스트 보기에서 왼쪽 그리기 가능하도록 프로그래밍 방식으로 설정 (0) | 2023.08.26 |
Swift를 사용한 하위 클래스 UIA 애플리케이션 (0) | 2023.08.26 |
n번째 아이가 있는 마지막 n개 항목을 선택할 수 있습니까? (0) | 2023.08.26 |
웹 API 응용 프로그램에서 PDF를 반환하는 방법 (0) | 2023.08.26 |