Почему setText () не работает в следующем коде в TextView?

// 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(); } } 

Макет деятельности выглядит следующим образом:

 <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> 

Запрос db возвращает содержимое, которое я могу проверить через logcat. Но текстовое представление не отображается. Тем не менее отображаются EditText и кнопки.

Я пробовал различные варианты из других сообщений, таких как (i) создание TextView static (ii) получение содержимого головоломки в строке, а затем установка его через setText () и другие вещи без успеха. Не могли бы вы предложить решение этого.

Вы вызываете setContentView(R.layout.activity_puzzle); В onResume() , но переменная tvPuzContent в onCreate() , поэтому она относится к текстовому представлению от исходного вызова setContentView в onCreate .

В принципе, к концу onCreate вы назначили все свои переменные, но затем onResume вызывается системой, и вы снова вызываете setContentView , что отбрасывает исходный макет, поэтому все ваши переменные указывают на старые представления, которые не отображаются на экране.

Просто не вызывайте setContentView в onResume() , так как вы все равно не меняете макет.