2012-03-19 17 views
0

私は自分のコードをきちんとした状態に保ち、できるだけ外部クラスに機能のほとんどを移して、簡単に再利用できるようにしています。Android:このContentProviderコードを外部クラスに移動するにはどうすればよいですか?

私は現在使用しているコンタクトピッカーを使用しており、再利用性を高めるために独自のクラスに移動したいと考えています。可能であれば、どうすれば下の2つの方法を自分のクラスに移すことができますか?あなたが動作する方法のいくつかのために、Activityの呼び出しを渡す必要が

public class mainDashView extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dashboard); 
     Something.showContactSelector(this); 
    } 

    @Override 
    protected void onActivityResult(int reqCode, int resultCode, Intent data) { 
     super.onActivityResult(reqCode, resultCode, data); 
     Something.onActivityResult(this, reqCode, resultCode, data); 
    } 
} 

class Something { 
    private static final int PICK_CONTACT = 1; 

    public static void showContactSelector(Activity activity) { 
     Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
     activity.startActivityForResult(contactIntent, PICK_CONTACT); 
    } 

    public static void onActivityResult(Activity activity, int reqCode, int resultCode, Intent data) { 
     switch (reqCode) { 
      case (PICK_CONTACT): 
       if (resultCode == Activity.RESULT_OK) { 
        Uri contactData = data.getData(); 
        Cursor c = activity.managedQuery(contactData, null, null, null, null); 
        if (c.moveToFirst()) { 
         String name = c.getString(c 
           .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
         // TODO Whatever you want to do with the selected 
         // contact name. 
        } 
       } 
       break; 
     } 
    } 
} 

:そうのような

public class mainDashView extends Activity { 


    public static final int PICK_CONTACT = 1; 


    /** 
    * @see android.app.Activity#onCreate(Bundle) 
    */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dashboard); 

    showContactSelector(); 
    } 


    // How do I move the bottom two Methods into an external class? 
    private void showContactSelector() { 


      Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(contactIntent, PICK_CONTACT); 


    } 


    @Override 
    protected void onActivityResult(int reqCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(reqCode, resultCode, data); 

     switch (reqCode) { 
     case (PICK_CONTACT) : 
      if (resultCode == Activity.RESULT_OK) { 
      Uri contactData = data.getData(); 
      Cursor c = managedQuery(contactData, null, null, null, null); 
      if (c.moveToFirst()) { 
       String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       // TODO Whatever you want to do with the selected contact name. 
      } 
      } 
      break; 
    } 

} 
} 

答えて

2

。たとえば、アクティビティクラス内ではstartActivityForResult(contactIntent, PICK_CONTACT);を直接呼び出すことができますが、それはthis.startActivityForResult(contactIntent, PICK_CONTACT);の短縮バージョンのみです。別のクラスでは、不可視のthisをクラスへの参照で置き換える必要があります。

+0

この回答をお寄せいただきありがとうございます。私のケースでは少し変更を加える必要がありましたが、多くのことを学び、正しい軌道に乗るのに役立ちました。どうもありがとう! –

関連する問題