2016-08-10 7 views
1

私の新しいアンドロイドプロジェクトの助けが必要でした。構造を簡単に説明しましょう。BaseAdapter内のgetContentResolver()にアクセスする

私のプロジェクトにはMainActivityがあり、アクティビティ内にはアプリケーションのタブからアクセスできる3つのフラグメントがあります。私の最後のタブ/フラグメントでは、写真、名前、番号とともに電話のすべての連絡先を一覧表示しようとしています。私は名前と番号については、次のコードに出くわした:

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
     while (phones.moveToNext()) { 
      String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      //Toast.makeText(getApplicationContext(),name, Toast.LENGTH_LONG).show(); 

      String full = name + " " + phoneNumber; 


     } 

私は私のフラグメントと名前の中に配置した場合、次のコードは、魔法のように動作し、とにかくgetActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); のような特定の参照を変更するので、私はそれを働かせることができましたが、左側に画像がある連絡先を表示するなどの問題に陥ったので、私はYouTubeのチュートリアルAndroid BaseAdapter Tutorialに出くわしました。 facepalmの瞬間をたくさんして、何が起こっているのか把握しようとしたら(私はAndroidの開発には慣れていない)、最初に2つのチュートリアルを終えて、小さな問題に着いた。

連絡先にアクセスしようとしました(この質問の最初のブロックを使用)私は、アクティビティ内にある場合を除いて、getContentResolver()の機能にアクセスできないことを知りました。ここに私のBaseAdapterのための私の現在のコードです:Android BaseAdapter Test Code - Paste Bin

誰かが私にこのアプローチに最善の方法を教えることができれば、それはとても助けになります。

連絡先にアクセスして画像、名前、番号で簡単にリストする方法はありますか?ライブラリはおそらく?何でもスーパーシンプルな作品。 WhatsAppの連絡先リスト、Viberなども好きですか?ありがとう!

+0

アダプタのコンストラクタにコンテキスト引数を追加し、インスタンスに格納します。アダプタが静的に格納されていないか、静的変数にコンテキストを格納している限り、これが最も簡単な方法です。さらに、アダプタの外部に連絡先を取得し、アダプタにリストを割り当てるだけです。 – GPuschka

答えて

1

getContentResolver()を呼び出すには、アクティビティのContextオブジェクトが必要です。BaseAdapterクラスを使用する場合は、これを行う必要があります。コンストラクタ経由

1.パスそれを - あなたのアダプタインサイド
:あなたの活動インサイド

public class MyBaseAdapter extends BaseAdapter { 
    private Context context; 

    public MyBaseAdapter (Context context) { 
     this.context = context; 
    } 

    // Do your stuff 
} 

MyBaseAdapter myBaseAdapter = new MyBaseAdapter(getApplicationContext()); 

2. [表示] -

からコンテキストを取得します。
public class MyBaseAdapter extends BaseAdapter { 

     //BaseAdpter stuff 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      if(inflater == null){ 
      Context context = parent.getContext(); 
      } 
      //BaseAdpter stuff 
      return convertView; 
     } 

} 

次に、context.getContentResolver()と電話してください。

+0

美しい解決策が本当にうまくいった! – user282190

関連する問題