0

다른 게시물을보고 제안 된 해결책을 시도했지만 나에게 효과가 없었습니다. 단추와 Textview가있는 간단한 응용 프로그램이 있으며 사용자가 단추를 누르면 TextView의 값이 1 씩 증가합니다 (텍스트 뷰에는 숫자 만 있음).화면 회전시 TextView 값이 복원되지 않음 - Android

세로 및 가로 모드에 대한 레이아웃이 다르며이 코드를 내 XML android:freezesText="true"에서 사용하여 화면 방향의 값을 고정 할 수있었습니다. 그러나 내가 지금 가지고있는 문제는 사용자가 TextView 값을 1 씩 증가시키기 위해 단추를 누를 때의 화면 방향에서 텍스트 뷰의 값이 0부터 시작한다는 것입니다. 예를 들어

예를 들어 세로 모드에서 23 일 때 사용자가 화면을 가로로 회전하고 버튼을 누르면 값이 1로 돌아갑니다. 어떻게 값을 23에서 시작 할 수 있습니까?

아래 코드는 제 코드입니다.

세로 레이아웃

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/textview"/> 

    <Button 
     android:id="@+id/up" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/up" /> 

</LinearLayout> 

Landspace 레이아웃

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/textview"/> 

    <Button 
     android:id="@+id/up" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/up" /> 

</LinearLayout> 

자바 코드

int counter = 0; 
TextView textview; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



     textview = (TextView)findViewById(R.id.textview); 


     final Button up = (Button)findViewById(R.id.up); 
     up.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       counter++; 
       textview.setText("" + counter); 

      } 
     }); 
    } 
+0

이미 Arvin

+0

I (복원 카운트의 상태) ...이 사용해 제공된 게시물에 있었고 해결책을 시도했지만 효과가 없습니다. – Android

답변

1

가 회전 할 때 의지가 그에 따라 다시 counter0에 재설정하는 세로에서 가로로 갈 때 당신은 어떻게 든 활동의 매개 변수를 다시로드 할 수있다. 충돌을 피하기 위해 변수를 static으로 만들려고 할 수 있습니다.

private static int counter = 0; 
+1

감사합니다, 카운터를 정적으로 만드는 일을 !! – Android

+0

@Android 당신은 오신 것을 환영합니다 :) –

1

당신이 잘못된 변수를 증가되는 날 것으로 보인다. 또한

@Override 
public void onClick(View v) { 
    count++; 
    textview.setText("" + counter); 
} 

의에서 onCreate 방법에서이 작업을 수행 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    textview = (TextView)findViewById(R.id.textview); 
    textview.setText("" + counter); //Add this line to automatically set the value 


    final Button up = (Button)findViewById(R.id.up); 
    plus.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      count++; 
      textview.setText("" + counter); 

     } 
    }); 
} 
+0

죄송합니다. 코드를 여기에 다시 써야만했습니다. 그래서 셀 수를 잊어 버렸습니다. 죄송합니다. – Android

2

당신은 이걸 당신의 데이터를 저장할 것처럼 당신이 번들 매개 변수를 변경할 응용 프로그램 상태 값을 onSaveInstanceState(Bundle savedInstanceState)을 무시하고 작성해야 심지어 장치 방향이 변경되었습니다.

int count = 0; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

     UI(); 

} 

public void UI() { 

    textview = (TextView)findViewById(R.id.textview); 

    final Button up = (Button)findViewById(R.id.up); 
    plus.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      count++; 
      textview.setText("" + counter); 

     } 
    }); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.activity_main); 

    UI(); 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 

    savedInstanceState.putString("key_name", textview.getText().toString()); 
    savedInstanceState.putInt("count", ""+count); 

} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState);{ 

    textview.setText("" + savedInstanceState.getString("key_name")); 
    count = savedInstanceState.getInt("count") 

} 
+0

이 코드를 시도했지만 화면을 회전하고 버튼을 눌렀을 때 textview의 값은 0부터 시작합니다. – Android

+0

이제 응용 프로그램 강제 종료합니다. – Android

+0

@Android 좋아, 잘못 말한거야. 이제 'savedInstanceState'에도 카운트 값을 저장하십시오. 내 편집 된 답변보기 – Yugesh

관련 문제