2013-02-06 90 views
0

我對android和編程的編程一般都很陌生。我搜索了web和stackoverflow的解決方案,但似乎無法找到一個。在片段中更新列表視圖

我有一個應用程序與片段處理不同的選項卡。我的一個片段包含一個listview。但是,listview不會更新或刷新。當我收到短信時它應該刷新。這裏是片段代碼:

短信接收其他三類的處理,接收器的代碼是:

package com.example.android.effectivenavigation; 

進口...等

public class SmsReceiver extends BroadcastReceiver { 

static ArrayList<SmsInfo> listSms = new ArrayList<SmsInfo>(); 
@Override 
public void onReceive(Context context, Intent intent) { 



    // get SMS map from intent 
    Bundle extras = intent.getExtras(); 
    // a notification message 
    String messages = ""; 
    if (extras != null) { 
     // get array data from SMS 
     Object[] smsExtra = (Object[]) extras.get("pdus"); // "pdus" is the key 

     for (int i = 0; i < smsExtra.length; ++i) { 
      // get sms message 
      SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]); 
      // get content and number 
      String body = sms.getMessageBody(); 
      String adition = " SMS:: "; 
      String einde = " ::SMS"; 
      String sendme = adition + body + einde; 
      String address = sms.getOriginatingAddress(); 
      // create display message 
      messages += "SMS from " + address + " :\n"; 
      messages += body + "\n"; 


      //Send to Arduino 
      Amarino.sendDataToArduino(context, DEVICE_ADDRESS, 'T', sendme); 


      // store in the list 
      listSms.add(new SmsInfo(address, body)); 
     } 

     // better check size before continue 
     if(listSms.size() > 0) { 
      // notify new arriving message 
      //Toast.makeText(context, messages, Toast.LENGTH_SHORT).show(); 
      // set data to send 
      Intent data = new Intent(context, MainActivity.class); 
      // new activity 
      data.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      data.putParcelableArrayListExtra("ListSMS", listSms); 
      // start 
      context.startActivity(data); 


     } 
    } 
} 

有人能照亮我的問題? 非常感謝提前!

+0

另外,正如您現在可能會看到現在發生的事情是,再次啓動Mainactivity.class。在應用程序的這個(第二個)產生中(當收到短信時),該列表用產生它的最後一個短信更新。然而,額外的短信不會顯示在列表中,只是在另一個新的產卵。 – c00k

回答

0

它看起來像我沒有什麼實際更新片段。您的廣播接收器正在接收信息,但您絕不會將其添加到片段中。

做這樣的事情在你的片段聲明添加:

private SMSReceiver receiver; 
private IntentFilter filter; 

在你onCreateView補充:

receiver = new SMSReceiver(); 
filter = new IntentFilter(SMSReceiver.YOUR_STRING_FILTER); 
registerReceiver(receiver, filter); 

然後在您的onReceive在SMSReceiver類中添加類似:

adapter = new SmsInfoAdapter (this, yourData); 
list.setAdapter(adapter); 

把這一切都放在Fragment類中,就是我所做的。

+0

我無法添加適配器和list.setAdapter(適配器) 這是因爲接收器在另一個文件中? SmsReceiver.java? 也有兩個班在處理傳入的短信,並把在列表中的不同的文件: SmsInfo.java SmsInfoadapter 我這些從這個例子:http://xjaphx.wordpress.com/2011/07/14/create-an-application-auto-receiving-new-message-sms/ 也許這會讓我的問題更清楚一點?正如我所說我對android/java相當新,所以一些基礎知識可能(但)對我來說不太清楚... – c00k

+0

Allthough我有我的arduino接收短信並在8x8 LED屏幕上滾動測量25釐米x 25釐米,我認爲是太棒了:) – c00k

+0

就面向對象的設計而言,最好爲每個需要更新/修改UI元素的地方創建單獨的BroadcastReceiver類。如果當前的人已經爲別的東西工作了,你可以將它移到那個人使用它的地方,併爲這個類創建一個單獨的一個。在onReceive()方法中,您可以調用方法/輕鬆修改列表適配器和列表。 流程將會是:發送廣播--->所有的接收器接收數據並修改他們需要的--->開心的程序員 – egfconnor