2012-08-06 26 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在布局上过于僵化,并且几乎不需要代码就可以省去麻烦,当你不得不重构这种方法时,它会为你节省无数次,而且它实际上没有太多的额外代码,并且更具可读性。

相关问题