2012-10-18 84 views
1

我想實現我自己的ListView,但我有一些問題。我有以下代碼:麻煩實施setAdatpter

private ArrayList<ItemChat> itemsChat; 
private ListView lv; 
...... 

public void show (View v){ 
    lv = (ListView)findViewById(R.id.listView); 
    itemsChat = new ArrayList<ItemChat>(); 
    itemsChat.add(new ItemChat(1, "Patatas", "Tuberculo", "drawable/patatas")); 
    ItemChatAdapter adapter = new ItemChatAdapter(this, itemsChat); 
    lv.setAdapter(adapter); 
} 

在佈局,我有一個按鈕that's onClick事件是「作秀」。它工作正常,並顯示我在ItemChat.java類中定義的適配器。

但是,當我嘗試調用另一個方法的相同代碼時,它根本不起作用。

public void show2 (String c){ 
    lv = (ListView)findViewById(R.id.listView); 
    itemsChat = new ArrayList<ItemChat>(); 
    itemsChat.add(new ItemChat(1, "Patatas", c , "drawable/patatas")); 
    ItemChatAdapter adapter = new ItemChatAdapter(this, itemsChat); 
    lv.setAdapter(adapter); 
} 

兩者之間的差異是論據。首先,我通過查看V因爲onClick事件, 在第二,我嘗試顯示適配器String c,而不是「Tuberculo」,但它不起作用。有沒有人有任何想法?

PS:onClick事件show()是在Eclipse圖形佈局(從View.onClick繼承)

好吧,這裏是我的全部代碼。

我試圖實現一個xmpp客戶端,它工作正常,連接到gtalk服務器,登錄usser,並從其他用戶收到消息。接收到的消息我可以在日誌中看到,所以我想在自定義列表視圖中接收mje(類似於Wahtsapp中的聊天)。

首先我創建了一個自定義列表視圖並實現了一個調用「顯示」按鈕來測試它是否正常工作。

當我按Show按鈕時,我的自定義列表視圖顯示:圖片,標題,說明和其他圖片。這是完美的作品。

然後,我想改變我的listview中的描述,而不是它,把收到的消息。所以我使用方法顯示(傳入消息)

我的main.xml文件有一個2個按鈕。 Conectec和Show。

和列表視圖,ID =的ListView

有2個文件的Java

ItemChat.java ItemChatAdapter.java

,我的主要活動

公共類MiCliente2延伸活動{

private final static String SERVER_HOST = "talk.google.com"; 
private final static int SERVER_PORT = 5222; 
private final static String SERVICE_NAME = "gmail.com"; 
private final static String LOGIN = "[email protected]"; 
private final static String PASSWORD = "xxxxxxx"; 
private XMPPConnection conn2; 

private MessageListener messageListener; 

private ArrayList<ItemChat> itemsChat; 
private ListView lv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_mi_cliente2); 

} 


//when press conect button, implement this. 
//it´s works perfect 
public void conect (View v){ 
    try 
    { 
     initConnection(); 
    Log.i("XMPPClient","Server conected"); 
    } 
    catch(XMPPException ex){ 
     Log.e("XMPPClient","Error conecting to server");  
    } 
} 

private void initConnection() throws XMPPException { 

    ConnectionConfiguration config = 
    new ConnectionConfiguration(SERVER_HOST, SERVER_PORT, SERVICE_NAME); 
    conn2 = new XMPPConnection(config); 
    config.setReconnectionAllowed(true); 

    try { 
     conn2.connect(); 

     Log.i("XMPPClient", " Connected to " + conn2.getHost()); 

    } catch (XMPPException ex) { 
     Log.e("XMPPClient", "Failed to connect to " + conn2.getHost()); 
     Log.e("XMPPClient", ex.toString()); 

     } 
    try { 
     conn2.login(LOGIN, PASSWORD); 
     Log.i("XMPPClient", "Logged in as " + conn2.getUser()); 

     Presence presence = new Presence(Presence.Type.available); 
     presence.setStatus("On line"); 
     conn2.sendPacket(presence); 

     // register listeners 
     ChatManager chatmanager = conn2.getChatManager(); 
     conn2.getChatManager().addChatListener(new ChatManagerListener() 
     { 
      public void chatCreated(final Chat chat, final boolean createdLocally) 
      { 
       chat.addMessageListener(new MessageListener() 
      { 
      public void processMessage(Chat chat, Message message) 
      { 
       Log.i("XMPPClient","Received message: " 
       + (message != null ? message.getBody() : "NULL")); 
     // I want to call show() passing message´s body    
       show(message.getBody());    
      } 
     }); 
     } 
    }); 

    } catch (XMPPException ex) { 
     Log.e("XMPPClient", " Failed to log in as " + LOGIN); 
     Log.e("XMPPClient", ex.toString()); 
    } 
} 

//Not work when call show("something") 
public void show(String v) { 
    Log.i("XMPPClient",v); // in log can see Received message 
    lv = (ListView)findViewById(R.id.listView); 

    itemsChat = new ArrayList<ItemChat>();    
    itemsChat.add(new ItemChat(1, "Patatas", "Tuberculo", "drawable/patatas")); 

    ItemChatAdapter adapter = new ItemChatAdapter(this, itemsChat); 

    Log.i("XMPPClient"," In show() before lv.setAdapter"); 
    lv.setAdapter(adapter); 

    //this log never happend, only can see before msje 

    Log.i("XMPPClient","In show() after lvsetAdapter"); 
} 

//pressing "Show" button 
public void show2 (View v){ 

    lv = (ListView)findViewById(R.id.listView); 
    itemsChat = new ArrayList<ItemChat>(); 
    itemsChat.add(new ItemChat(1, "Patatas", "Tuberculo", "drawable/patatas")); 
    ItemChatAdapter adapter = new ItemChatAdapter(this, itemsChat); 
    lv.setAdapter(adapter); 
} 

}

當傳入的消息和show(meesage.getbody)不顯示任何內容,並且在logcat中我只看到: Log.i(「XMPPClient」,「In show()before lv.setAdapter」); 不是listview。

+1

你說它根本不起作用。當你運行'show2()',什麼顯示?還是會崩潰?如果它崩潰了,你會在日誌中得到什麼錯誤信息? – Blumer

+1

我在發佈的代碼中看不到問題。你的問題在別處。你能發佈更多的代碼嗎? –

+0

不崩潰,突然沒有任何鞭打。我會把完整的代碼,也許可以幫助我。我認爲這個問題是爭論。 – cristianego

回答

0

首先,什麼是「c」?如果你使用onClick屬性在xml上設置它,那麼你不能將任何字符串值傳遞給這個方法......那麼現在什麼是「c」?如果你從任何其他地方調用這個方法,那麼它應該工作...但是,如果您設置按鈕的onClick你的XML屬性,那麼你應該把它作爲

public void show(View v) 

你可能想打電話給你的節目(串c)方法,你的節目(c)視圖?因爲這將最終被稱爲...