2011-01-15 3 views
0

Hier ist der Code der Hauptaktivität. Ich habe TextView in addJoke() -Methode hinzugefügt, aber es erscheint nicht in LinearLayout. bitte lösen.TextView erscheint nicht oder wird nicht zu LinearLayout hinzugefügt

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.FIRST + 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 
    } 

}   

Hier ist advanced.xml;

Update: Modifizierter Code ein wenig, hinzugefügt Layout.params(), aber immer noch TextView nicht angezeigt.

Antwort

0

Das Problem ist gelöst ....

Ich war sehr dumm .... Das war so dumm .... Ich habe vergessen, android hinzuzufügen: orientation = "vertical" für das Wurzelelement .. Siehe den Code.

ich Stackoverflow so gewöhnt .... Ich wurde faul

Danke alle großen Entwickler, die zusammen mit der Antwort jedes Mal, wenn ich eine Frage gestellt einige gute Tipps gab.

0

Zwei Gründe; Sie müssen die Höhe und Breite Ihrer TV-Ansicht entweder direkt oder mithilfe von Layoutparametern festlegen. Anschließend müssen Sie setContentView erneut aufrufen, da das Layout, zu dem Sie es hinzufügen, ein untergeordnetes Element des Stammlayouts ist Möglicherweise müssen Sie einen Verweis auf das Root-Layout erhalten und dann die TV-Ansicht zum entsprechenden untergeordneten Layout und dann setContentView (Root-Layout) hinzufügen.

+0

ist es wirklich notwendig, setContentView() erneut aufzurufen, wenn der View Tree immer gleich ist (auch wenn mit etwas mehr "Blättern")? – bigstones

+0

Ich habe den letzten Satz nicht verstanden .... Ich habe TextView Kind von root Layout hinzugefügt .... Ist das das Problem? – naquiuddin

+0

Ich habe Bezug auf das Kind-Layout genommen und das TextView-Widget hinzugefügt, siehe Code, aber immer noch nicht ... Ist es notwendig, die Höhe und Breite Parameter beim dynamischen Hinzufügen der TextView zu setzen? – naquiuddin

0

Wenn Sie überprüfen möchten, wenn Ihre Ansicht überhaupt vorhanden ist, werden Sie froh sein, den Hierarchie-Viewer zu verwenden. Überprüfen Sie dies: http://developer.android.com/guide/developing/tools/hierarchy-viewer.html

Es zeigt Ihnen alle Ansichten vorhanden, und wie sie platziert sind. Das sollte dir beim Debuggen so helfen!

+0

Ich habe versucht, heirarchyviewer verwenden, aber es gibt einen Fehler, dass adb.exe nicht gefunden wird ... Ich denke, das ist wegen der neues SDK R8 ... Der adb-Standort wurde in plattform-to geändert Ools .... Jede Lösung ... Bitte helfen. – naquiuddin

+0

Ja, du solltest dieses Verzeichnis zu deinem Pfad hinzufügen. Schamloser Link zu meinem Blog über das mit Lösung :) http://androclip.huitiges.nl/2011/01/10/hierarchy-viewer-problems/ – Nanne

+0

Es ist überhaupt nicht schamlos .... Vielen Dank für den Beitrag .. ..Es ist eine sehr einfache Lösung. – naquiuddin