// 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();
}
}
The activity-layout is as follows:
<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>
The db query is returning content properly which I can check through logcat. But the text view is not showing up.The EditText and buttons are being displayed though.
I have tried various options from other posts like (i )making TextView static (ii) receiving the puzzle Content in a string and then setting it through setText() and other things with no success. Could you pls, suggest a solution to this.
You are calling setContentView(R.layout.activity_puzzle);
in onResume()
, but the tvPuzContent
variable is instantiated in onCreate()
, so it refers to the text view from the original call to setContentView
in onCreate
.
Basically, by the end of onCreate
you have assigned all your variables, but then onResume
is called by the system and you call setContentView
again, which throws away your original layout, so all your variables are pointing at old views that are not on screen.
Just don't call setContentView
in onResume()
, since you aren't changing the layout anyway.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With