마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

소스코드가 너무 더러워요(?)... 어떻게 최적화시키죠? + 여러액티비티에서 같은 행동을하고싶다면??

0 추천
public class activity_4 extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_4);
        //배열을 생성해서 값을넣고 어댑터를 이용해서 리스트뷰에 띄우는 것입니다.
        //데이터를 배열에 삽입
        ArrayList < String > arrayList = new ArrayList < String > ();
        arrayList.add("전화번호 : " + getMyTelephony(1));
        arrayList.add("아이피 주소 : " + getMyNetwork(1));
        arrayList.add("맥 주소 : " + getMyNetwork(2));
        arrayList.add("SSID,BSSID : " + getMyNetwork(3));
        arrayList.add("IMEI : " + getMyTelephony(2));
        //어댑터 준비
        ArrayAdapter < String > adapter;
        adapter = new ArrayAdapter < String > (this, android.R.layout.simple_list_item_1, arrayList);
        //리스트뷰와 어댑터연결
        ListView listView = (ListView) findViewById(R.id.list4);
        listView.setAdapter(adapter);
    }
    
    //전화번호랑 IMEI를 보여줍니다.
    public String getMyTelephony(int num) {
        
        TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        
        switch (num) {
            case 1:
            {
                String mPhoneNumber = tMgr.getLine1Number();
                if (mPhoneNumber == "") {
                    return "번호없음";
                }
                return mPhoneNumber;
            }
            case 2:
            {
                String device_id = tMgr.getDeviceId();
                return device_id;
            }
        }
        return null;
    };
    
    //와이파이 정보를 보여주는 함수입니다.
    public String getMyNetwork(int num) {
        WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE);
        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
        
        switch (num) {
            case 1: //ip
            int ip = wifiInfo.getIpAddress();
            String ipAddress = Formatter.formatIpAddress(ip);
            return ipAddress;
            case 2: //mac
            String macAddress = wifiInfo.getMacAddress();
            return macAddress;
            case 3: //SSID,BSSID
            String a = wifiInfo.getSSID(); //blustak
            String b = wifiInfo.getBSSID(); //mac주소?
            return a + b;
            case 4: //imei
            //String imEi = wifiInfo.getDeviceId(); 함수없음
            String androidID = android.provider.Settings.Secure.ANDROID_ID;
            return androidID;
        }
        return null;
    };

}

 

 

 

이게 액티비티 소스입니다.

리스트뷰에다가 몇가지 값들을 집어넣고 보여주는예입니다.

보시다시피 너무 더러운데요..

같은기능을 가진것끼리 묶자했는데 이렇게 되버렸네요.

혹시 좋은 방법이있을까요?

 

 

 

그리구 가령 액티비티1, 2,3,4에서

길게 클릭했을때 토스트메세지를 띄우고싶다.

이럴경우 onlongclick을 4개모두에 작성해야하나요?

아니면 다른방법이있을까요?

봉쿠탁 (310 포인트) 님이 2014년 3월 27일 질문
자바 상속을 찾아보세요~ '-'ㅋ

2개의 답변

+4 추천
 
채택된 답변
크게 지저분한 느낌은 안드는 코든데요. 뭐 코딩스타일은 개인차가 있는것이니까요.

동일한 동작을 하는것이라면 상속을 이용하거나 하나의 클래스를 구현해서 사용하는 방법 두가지가 있습니다.

현재 상황에 맞는 방법은 상속이겠네요.

 

상속의 경우 BaseActivity extends Activity를 구현하신 후 이곳에 onLongclick을 구현하세요.

그리고나서 Activity1 extends BaseActivity를 하면 BaseActivity의 기능을 Activity1 이 사용가능하도록 하는 개념입니다.

 

현재 소스상에서는 Activity1 extends Activity로 되어있네요.
dev_아마 (9,750 포인트) 님이 2014년 3월 28일 답변
봉쿠탁님이 2014년 3월 28일 채택됨
+2 추천
여러 Activity에서 유사한 UI를 제공하는 것은 Fragment,

기능적으로 동일한 걸 제공하고 싶으시면 클래스 하나 만드셔서 static 메소드로 빼내시는 방법이 있습니다.
천도복숭아 (6,080 포인트) 님이 2014년 3월 28일 답변
...