2012-08-06 61 views
0

我的項目用於接收短信並顯示在列表中。發生在以下由於ListActivity的代碼如何在同一個java代碼中定義兩個超類?

setListAdapter(new ArrayAdapter<String>(this, R.layout.main,str)); 

線在代碼下面不限定 錯誤。然而,BroadcastReceiver需要接收SMS的方法。

public class SmsReceiver extends BroadcastReceiver{ 

那麼,問題是如何在一個java代碼中定義兩個超類?完整的Java代碼提供如下:

package net.eg.app; 

    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.app.ListActivity; 
    import android.telephony.SmsMessage; 

    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemClickListener; 
    import android.widget.ArrayAdapter; 
    import android.widget.ListView; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class SmsReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //---get the SMS message passed in--- 
     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 
     String str = "";  
     if (bundle != null) 
     { 
      //---retrieve the SMS message received--- 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length];    
      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
       str += "SMS from " + msgs[i].getOriginatingAddress();      
       str += " :"; 
       str += msgs[i].getMessageBody().toString(); 
       str += "\n";   
      } 

      //---display in list--- 
      setListAdapter(new ArrayAdapter<String>(this, R.layout.main,str)); 

      ListView listView = getListView(); 
      listView.setTextFilterEnabled(true); 


      //---method is call when listitem is clicked--- 
      listView.setOnItemClickListener(new OnItemClickListener() { 
       //described method 
      }); 
     }       
    } 


} 
+0

Java不支持多繼承,如果這就是你要求的。讓你的課程包裝你需要的課程。 – Dave 2012-08-06 04:04:02

回答

2

如果「同時定義超」你的意思是,延長超過一個類,那麼簡單的答案是NO 。 Java不支持多重繼承。你應該重新考慮你的整個方法。

但你可以這樣做:

public class YourClass extends Class1 { 

    private final Class2 class2Impl = new Class2() { 
    // Class2 "view" of this class, this inner class 
    // has access to all fields/methods of YourClass 
    }; 

    public Class2 asClass2() { return class2Impl; } 

    } 

您也可以找到更多的多重繼承和「變通」如果你真的需要。只需搜索Google

希望有所幫助。如果那完全沒有幫助,那麼我很抱歉誤解你的問題。

+0

謝謝,你確實回答了我的問題。但是,我不能完全理解你建議的d碼。我可以知道什麼是class2Impl嗎?以及爲什麼它需要'公共類2 asClass2(){return class2Impl;}' – kin 2012-08-06 05:47:19

0

你可以實現它像0gravity所說的那樣;

public class SMSActivity extends ListActivity { 
private SMSReceived mSmsReceiver; 

//activity private variable to be manipulated by the sms receiver 
private mSmsCount; 


public SMSActivity(){ 
    mSmsReceiver = new SMSReceived(); 
} 


private class SMSReceived extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //lets manipulate the SMSActivity's private member variable 
     mSmsCount++; 
    } 
} 

}

您也面臨着非常普遍的問題,ListActivity是非常死板。另一種解決方案是從不使用ListActivity。

只需使用普通活動,在佈局中嵌入ListView,然後在私有內部類中實現ListAdapter。 ListActivity在佈局上過於僵化,並且幾乎不需要代碼就可以省去麻煩,當你不得不重構這種方法時,它會爲你節省無數次,而且它實際上沒有太多的額外代碼,並且更具可讀性。

相關問題