programing

전체 레이아웃 보기 새로 고침을 강제로 적용하는 방법은 무엇입니까?

topblog 2023. 8. 26. 10:16
반응형

전체 레이아웃 보기 새로 고침을 강제로 적용하는 방법은 무엇입니까?

기본 레이아웃 리소스 보기를 강제로 다시 그리거나 새로 고칩니다(예: 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는 작동하지 않습니다.저는 주제에 대한 경험이 없지만, 제가 생각할 수 있는 두 가지 대안은 다음과 같습니다.

  1. 통화 세트대신에 Create()에 있는 테마 또는
  2. 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

반응형