2014-01-23 4 views
4
// All required Imports 

public class PuzzleActivity extends Activity implements OnClickListener{ 
    private PuzzlerDB db; 
    private Puzzle puz; 

    private int puzId=1;  
    private String puzAns=""; 
    private int score=0; 

    private TextView tvPuzContent; 
    private EditText etPuzAns; 
    private Button btnCheck; 

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

     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     final boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

     setContentView(R.layout.activity_puzzle); 

     if (customTitleSupported) { 
      getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title); 
     } 

     db = new PuzzlerDB(this); 
     puz = db.getPuzzle(puzId); 
     puzAns = puz.getAnswer(); 

     tvPuzContent = (TextView) findViewById(R.id.tv_puz_content); 
     tvPuzContent.setText(puz.getContent()); 
     btnCheck = (Button) findViewById(R.id.btn_check); 
     btnCheck.setOnClickListener(this); 

     android.util.Log.v("IN SIDE ACTIVITY: ", "id: "+ puzId + " answer: "+puz.getAnswer()); 

    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.btn_check: 
      checkAndNotify(puzAns); 
      break; 
     }  
    } 

    private void checkAndNotify(String puzAns) 
    { 
     String ans = ((EditText)findViewById(R.id.te_puz_ans)).getText().toString(); 

     if(ans.trim().equalsIgnoreCase(puzAns.trim())) 
     { 
      //show pop-up dialog for right answer 
      new AlertDialog.Builder(this).setTitle("The Puzzler:") 
       .setMessage("Wow! Right Answer!!") 
       .setNeutralButton("Continue", new DialogInterface.OnClickListener() 
       { 
        public void onClick(DialogInterface dlg, int sumthin) 
        { 
         android.util.Log.v("IN SIDE function:", " onClick of Dialog"); 
         update(); 
        } 
       }).show(); 

     }else{ 
      new AlertDialog.Builder(this).setTitle("The Puzzler:") 
      .setMessage("Sorry! You have to rethink!!") 
      .setNeutralButton("Continue", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dlg, int sumthin) 
       { 
        // do nothing – it will close on its own 
       } 
      }).show();   
     } 
    } 

    protected void update() { 
     score = score + 10; 
     ++puzId;      
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     setContentView(R.layout.activity_puzzle); 
     puz = db.getPuzzle(puzId); 
     if(puz != null) 
     { 
      tvPuzContent.setText(puz.getContent()); 
      android.util.Log.v("IN SIDE onResume:", " Content: "+ puz.getContent()); 
      puzAns = puz.getAnswer();   
     } 
    } 

    @Override 
    protected void onDestroy() { 
      super.onDestroy(); 
      db.close(); 
    } 
} 

활동 레이아웃은 다음과 같습니다 DB를 쿼리가 제대로 내용을 반환TextView의 setText()가 다음 코드에서 작동하지 않는 이유는 무엇입니까? 다음과 같이

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bgimg" 
    android:layout_gravity="center"> 

    <TableLayout android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:layout_margin="20dp" 
     android:stretchColumns="*"> 

     <TableRow>  
      <TextView android:id="@+id/tv_puz_content" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_span="3" 
       android:typeface="serif" 
       android:textStyle="bold" 
       android:textSize="20sp" 
       android:text="" /> 
     </TableRow> 

     <TableRow>   
      <EditText android:id="@+id/te_puz_ans" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="10dp" 
       android:layout_span="3"    
       android:hint="Answer" /> 
     </TableRow> 

     <TableRow android:gravity="center">   
      <Button android:id="@+id/btn_check" 
       android:layout_width="60dp" 
       android:layout_height="wrap_content" 
       android:hint="Check" /> 

      <Button android:id="@+id/btn_skip" 
       android:layout_width="60dp" 
       android:layout_height="wrap_content" 
       android:hint="Skip" /> 

      <Button android:id="@+id/btn_hint" 
       android:layout_width="60dp" 
       android:layout_height="wrap_content" 
       android:hint="Hint" /> 
     </TableRow> 
    </TableLayout> 
</LinearLayout> 

내가 로그 캣을 통해 확인할 수있다. 하지만 텍스트보기가 나타나지 않습니다. EditText 및 단추가 표시되고 있습니다.

나는 텍스트 뷰의 정적 (ⅱ) 문자열의 퍼즐 콘텐츠를 수신 한 후 성공하지의 setText()와 다른 것들을 통해 설정하기 (I)와 같은 다른 게시물에서 다양한 옵션을 시도했습니다. pls, 이것에 대한 해결책을 제안하십시오.

+0

는 PUZ var에 뭔가를 얻었다? – Saqib

+0

이 로그에 뭐가 들었습니까? android.util.Log.v ("IN 사이드 onResume :", "Content :"+ puz.getContent()); – pozuelog

+0

예. puz는 모든 데이터 멤버의 가치를 가지고 있습니다. 22 '01 -23 : 28 : 17.937 : V/SIDE onResume IN : (18673) : 내용 : 2 × 5의 값이 무엇 그리고 나는 등 이상 로그에 퍼즐의 내용을 무엇입니까 – Dexter

답변

8

당신은 onResume()에서 setContentView(R.layout.activity_puzzle);을 요구하고 있지만, tvPuzContent 변수는 onCreate()에서 인스턴스화, 그래서 onCreate에서 setContentView에 원래 통화에서 텍스트보기를 말합니다.

기본적으로, onCreate의 말에 당신은 모든 변수를 할당,하지만 onResume은 시스템에 의해 호출되고 그렇게 모든 변수는 기존 전망을 가리키는되어, 원래의 레이아웃을 멀리 던지는 다시 setContentView 전화 화면에 없습니다.

어쨌든 레이아웃을 변경하지 않으므로 onResume()setContentView을 부르지 마십시오.

+0

감사합니다. 나는 그 부분을 바로 잡았다. onResume()에서 setContentView()를 제거하고 화면에 내용을 가져 왔습니다. 하지만 alert 대화 상자를 닫은 후에 onResume()이 호출되지 않는 이유는 무엇입니까? 내가 잘못하지 않았다면, 대화 해제 후 ongrounds()가 호출 되어야만 액티비티가 포어 그라운드가됩니다. 이것은 getPuzzle()을 통해 새로운 퍼즐을 얻어야하고 textview를 업데이트 했어야합니까? 새로운 퍼즐 컨텐츠로 어떻게 활동을 다시 그릴 수 있습니까? 배경으로 활동을 가하고로 – Dexter

+1

나는 대화 상자 수를 생각하지 않는다 - 대화가 본질적 활동 내의 다른보기입니다. 다른 활동 만 활동을 배경으로 만들 수 있습니다. 새로운 활동이 투명 여부를 전체 화면 인 경우에만 중지시/onRestart/ONSTART 트리거하지 않고 onPause/onResume을 트리거합니다. 대화 상자가 닫힐 때 어떤 일이 일어나길 원한다면, 대화 상자의 메소드를 생성하고 대화 상자의 버튼 리스너에서 해당 메소드를 호출하십시오. – Tenfour04

+0

그게 핵심입니다. 어떤 활동이 차단 될 때 "onPaused"라는 인상을 받았습니다. 그러나 블로킹 요소 (Dialog는이 경우)가 Activity 자체의 또 다른 구성 요소 인 경우에는 그렇지 않습니다. +1. 감사. – Dexter

관련 문제