TextVIew doesn't appear or doesn't get added to LinearLayout
Here is the code of main activity. I added TextView in addJoke() method, but it doesn't appear in LinearLayout. please solve.
package edu.calpoly.android.lab2;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup.LayoutParams;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class AdvancedJokeList extends Activity {
private static int i=0;
//protected String m_strAuthorName;
protected ArrayList<Joke> m_arrJokeList=new ArrayList<Joke>();
//protected JokeListAdapter m_jokeAdapter;
/**
* ViewGroup used for maintaining a list of Views that each display Jokes.
**/
protected LinearLayout m_vwJokeLayout;
protected EditText m_vwJokeEditText;
protected Button m_vwJokeButton;
protected int m_nDarkColor;
protected int m_nLightColor;
/**
* Filter Options Submenu constants
*/
protected static final int FILTER_OPTIONS = 1;
protected static final int LIKE = Menu.FIRST + 1;
protected static final int DISLIKE = Menu.FIRST + 2;
protected static final int UNRATED = Menu.FIR开发者_开发知识库ST + 3;
protected static final int SHOW_ALL = Menu.FIRST + 4;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initLayout();
String[] jokestring=getResources().getStringArray(R.array.jokeList);
for(String str : jokestring)
{
Joke j=new Joke();
j.setJoke(str);
addJoke(j);
}
initAddJokeListeners();
}
protected void addJokeImplementation(){
String strJoke=m_vwJokeEditText.getText().toString().trim();
if(!strJoke.equals(""))
{
Joke joke=new Joke();
joke.setJoke(strJoke);
addJoke(joke);
}
}
protected void initLayout() {
setContentView(R.layout.advanced);
m_vwJokeLayout=(LinearLayout)findViewById(R.id.jokeListViewGroup);
m_vwJokeEditText=(EditText)findViewById(R.id.newJokeEditText);
m_vwJokeButton=(Button)findViewById(R.id.addJokeButton);
}
protected void initAddJokeListeners() {
// TODO
m_vwJokeEditText.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v,int keyCOde, KeyEvent event){
if(event.getAction()==KeyEvent.ACTION_DOWN)
{
if(keyCOde==KeyEvent.KEYCODE_DPAD_CENTER)
{
addJokeImplementation();
}
}
return false;
}
});
m_vwJokeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//Implement code to add a new joke here...
addJokeImplementation();
}
});
}
protected void addJoke(Joke joke) {
if(!m_arrJokeList.contains(joke))
{
m_arrJokeList.add(joke);
//I also added textview here this one also
//doesn't appear in Emulator layout, wondering whats wrong?;
TextView TV=new TextView(this);
TV.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
TV.setText(joke.toString());
m_vwJokeLayout.addView(TV);
m_nDarkColor=getResources().getColor(R.color.dark);
m_nLightColor=getResources().getColor(R.color.light);
if(i==0)
{
TV.setBackgroundColor(m_nLightColor);
i=1;
}
else
{
TV.setBackgroundColor(m_nDarkColor);
i=0;
}
m_vwJokeEditText.setText("");
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(m_vwJokeEditText.getWindowToken(), 0);
}
}
/**
* Method used to retrieve Jokes from online server. The getJoke script
* takes a single optional parameter, which should be encode in "UTF-8".
* This parameter allows tells script to only retrieve Jokes whose author
* name matches the value in the parameter.
*
* param-1) "author": The author of the joke.
*
* URL: http://simexusa.com/aac/getJokes.php?
*
*/
protected void getJokesFromServer() {
// TODO
}
/**
* This method uploads a single Joke to the server. This method should test
* the response from the server and display success or failure to the user
* via a Toast Notification
*
* The addJoke script on the server requires two parameters, both of which
* should be encode in "UTF-8":
*
* param-1) "joke": The text of the joke.
*
* param-2) "author": The author of the joke.
*
* URL: http://simexusa.com/aac/addJoke.php?
*
* @param joke
* The Joke to be uploaded to the server.
*
*/
protected void uploadJokeToServer(Joke joke) {
// TODO
}
}
Here is advanced.xml;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/addJokeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Joke"
/>
<EditText
android:id="@+id/newJokeEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Enter Joke"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/jokeListViewGroup"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</LinearLayout>
</LinearLayout>
Update: Modified code a little bit, added Layout.params() but still TextView doesn't appear.
Two reasons; You need to set the height and width of your TV view, either directly or by using layout params, and then after you've done this you need to call setContentView again but since the layout your adding it to is a child of the root layout, you may need to get a reference to the root layout then add the TV view to the appropriate child layout and then setContentView(root layout).
If you want to check if your view is present at all, you will be glad to use the Hierarchy-viewer. Check this: http://developer.android.com/guide/developing/tools/hierarchy-viewer.html
It shows you all Views present, and how they're placed. That should help you a lot with debugging like this!
The problem is solved....
I was very stupid....This was so silly.... I forgot to add android:orientation="vertical" for the root element..see the code.
I got so used to Stackoverflow....I became lazy
Thank you all great developers who gave some good tips along with the answer each time I asked a question.
精彩评论