开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜