1

自分で実装したいのですListViewが、問題があります。私は次のコードを持っています:

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);
}

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);
}

2つの違いは議論です。最初に、イベントのためにビューVを渡しますonClick。次に、「Tuberculo」の代わりにアダプターに表示しようとしますString cが、機能しません。誰かアイデアはありますか?

PS:onClick イベントshow()はEclipseグラフィックレイアウトからのものです(から継承されますView.onClick

わかりました、これが私の完全なコードです。

xmppクライアントを実装しようとしていますが、正常に動作し、gtalkサーバーに接続し、usserをログに記録し、他のユーザーからメッセージを受信しました。ログに表示される受信メッセージなので、カスタムリストビュー(Wahtsappでのチャットのようなもの)でmjeを受信したいと思います。

まず、カスタムリストビューを作成し、「表示」を呼び出すボタンを実装して、正常に機能するかどうかをテストしました。

[表示]ボタンを押すと、カスタムリストビューに画像、タイトル、説明、その他の画像が表示されます。それは完璧に動作します。

次に、リストビューの説明を変更し、Receivedメッセージを入力します。だから私はメソッドshow(着信メッセージ)を使用します

私のmain.xmlファイルには2つのボタンがあります。ConectecとShow。

およびlistviews、id = listView

2つのファイルjavaがあります

ItemChat.java ItemChatAdapter.java

と私の主な活動

パブリッククラスMiCliente2はActivity{を拡張します

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 = "xxxxxxxx@gmail.com";
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"); リストビューではありません。

4

1 に答える 1

0

まず、「c」とは?onClick属性を使用してxmlに設定すると、このメソッドに文字列値を渡すことができなくなります...では、「c」とは何ですか? 他の場所からこのメソッドを呼び出すと、機能するはずです...しかし、xml でボタンの onClick 属性を設定する場合は、次のように使用する必要があります。

public void show(View v)

show(View c) で show(String c) メソッドを呼び出したいと思うかもしれません。それは最終的に呼び出されるため...

于 2012-11-09T22:44:53.037 に答える