37

コンテキストからビューまたはfindViewById()を取得したいですか? または意図からですか?android - コンテキストからのビューの取得方法

私は放送受信機の特定のビューに到達しようとしています。また、onReceiveのパラメータはコンテキストとインテントです。

まあ、私はクラスがあり、その中に私の放送受信機です。今、私はそれから放送受信機を分離しようとしていますが、私は離れた放送受信機クラスから自分のクラスのビューと通信することができる方法が必要です。

ありがとうございました。

あなたがXMLリソースからインフレを経由してルートレイアウトビューにアクセスして、findViewByidと、このルートのレイアウト()からのすべてのあなたの意見を見つけることができるあなたの放送受信機で

答えて

5

View view = View.inflate(context, R.layout.ROOT_LAYOUT, null); 

今あなたが経由であなたのビューにアクセスすることができます「表示」や、あなたのビュータイプにそれらをキャスト:

myImage = (ImageView) view.findViewById(R.id.my_image); 
+0

私はルートパラメータに配置する必要がありますか? – lorraine

+0

ルートパラメータは、拡張された階層のルートビューです。上記の例では、私はすでにルートであるビューを膨らませる方法を示しているので、このパラメータをfalseにすることができます。膨張したビューがルートでない場合は、ルートビューを3番目のパラメータとして配置します。 –

+3

'false'の代わりに' null'でなければなりませんか? – Roberto

43

コンテキストで開始し、関連する活動のルートビューは

View rootView = ((Activity)_context).Window.DecorView.FindViewById(Android.Resource.Id.Content); 
であったことができます生のAndroidで

それはのようになりたい:

LayoutInflater inflater = (LayoutInflater) Read_file.this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

Read file is current activity in which you want your context. 

View layout = inflater.inflate(R.layout.your_layout_name,(ViewGroup)findViewById(R.id.layout_name_id)); 

、あなたはこれを使用することができます。そして、単にこの本

View v = rootView.findViewById(R.id.your_view_id); 
+3

'View v = rootView.findViewById(R.id.your_view_id);'を 'View v =(View)rootview.findViewById(R.id。クラス_View_は、Viewの任意の派生クラスにすることができます。 –

+1

これを試してみると、「原因:java.lang.ClassCastException:android.app.Applicationをandroid.app.Activityにキャストできません」というメッセージが表示されます。 – drynyn

+2

@drynynこれは、この例では、アクティビティがコンテキストに対して渡されていると仮定しているためです。これは安全な前提ではありません。 instanceofキーワードを使用して、キャストが実行するのが安全かどうかを調べることができます。 (例としてgoogle "instanceof java")。 – eimmer

1

最初の使用にfindViewByIdを呼び出す

View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content) 

をレイアウト内の要素を見つける。

TextView textView = (TextView) ((Activity) context).findViewById(R.id.textView1); 
41

アクティビティクラスで次に
import android.content.Context; 


public class ClassicSingleton { 
    private Context c=null; 
    private static ClassicSingleton instance = null; 
    protected ClassicSingleton() 
    { 
     // Exists only to defeat instantiation. 
    } 
    public void setContext(Context ctx) 
    { 
    c=ctx; 
    } 
    public Context getContext() 
    { 
     return c; 
    } 
    public static ClassicSingleton getInstance() 
    { 
     if(instance == null) { 
      instance = new ClassicSingleton(); 
     } 
     return instance; 
    } 
} 

private ClassicSingleton cs = ClassicSingleton.getInstance(); 

と非アクティビティクラスで:

ClassicSingleton cs= ClassicSingleton.getInstance(); 
     Context c=cs.getContext(); 
     ImageView imageView = (ImageView) ((Activity)c).findViewById(R.id.imageView1); 
+3

良い答えです。これは2015年のことですが、上記の方法は非常に冗長なようです。 –

0

は、なぜあなたはちょうどシングルトンを使用していない:あなたはどんなのTextViewを見つけることができます例えば

ImageView myImage = (ImageView) layout.findViewById(R.id.my_image); 
関連する問題