2012-08-06 2 views
0

내 프로젝트는 SMS 수신 및 목록 표시에 사용됩니다. 오류가 아래의 코드에서 정의되지 않은 인해 ListActivity에 코드동일한 자바 코드에서 두 수퍼 클래스를 정의하는 방법은 무엇입니까?

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

의 라인을 다음에 발생합니다. 그러나 BroadcastReceiver는 SMS 수신 방법이 필요했습니다.

public class SmsReceiver extends BroadcastReceiver{ 

그렇다면 질문은 두 수퍼 클래스를 하나의 Java 코드로 정의하는 방법입니까? 그 간단한 대답이 NO 더 이상의 클래스를 확장, 뜻 "두 수퍼 클래스를 정의"에 의한 경우

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

답변

2

: 전체 자바 코드는 아래에 제공됩니다. 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이 무엇인지 알 수 있습니까? 그리고 왜 그것이'public class2 asClass2() {return class2Impl;}'을 필요로하는지 – kin

0

당신은 0 중력과 같이 정확하게 달성 할 수 있습니다.

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 매우 inflexibly있는 매우 일반적인 문제에 직면하고있다. 대체 솔루션은 ListActivity를 절대로 사용하지 않는 것입니다.

정상적인 활동을 사용하고 레이아웃에 ListView를 포함하고 개인 내부 클래스에 ListAdapter를 구현하기 만하면됩니다. ListActivity는 레이아웃이 너무 딱딱하지 않고 번거 로움을 해소 할 수있는 코드가 거의 없기 때문에 어쨌든이 접근 방식으로 리팩터링해야 할 때 무수히 많은 시간을 절약 할 수 있습니다.

관련 문제