2016-07-16 6 views
0

を検出する方法:アンドロイド - 私は次のコードを使用していた親のレイアウトタイプ

 String[] UIItems = new String[5]; 
     UIItems[0] = "game_area_holder"; 
     UIItems[1] = "topListBtn"; 
     UIItems[2] = "bigBtn"; 
     UIItems[3] = "reposBtn"; 
     UIItems[4] = "sectorStateColorLine"; 
     for (int number = 0; number < UIItems.length; number++) { 
      itemID = getResources().getIdentifier(UIItems[number],"id",getPackageName()); 

      ImageView aktUIItem = (ImageView) findViewById(itemID); 

      FrameLayout.LayoutParams aktUIItemParams = (FrameLayout.LayoutParams)aktUIItem.getLayoutParams(); 
. 
. doing things here with aktUIItemParams 
. 
} 

これは正常に動作しますが、私は別のレイアウトにイメージの1つを配置する場合(の直鎖、Relative-など)その後、私は、エラーメッセージが表示されます:

とjava.lang.ClassCastException:親ではないのでandroid.widget.RelativeLayout $ LayoutParamsはもちろんandroid.widget.FrameLayout $ LayoutParams

にキャストすることはできません、それはですFrameLayout ...しかし、画像の親のレイアウトタイプをプログラムで確認するにはどうすればよいですか? y?または、どのようにして「標準」LayoutParamsにgetLayoutParams()をキャストできますか?

屋、あなたはレイアウトのparamsは、あなたが消費することができるタイプのものであるかどうかを確認するために instanceofチェックにする必要がありますため
+0

"または、どのように"標準の "LayoutParamsにgetLayoutParams()をキャストできますか?" ['ViewGroup.LayoutParams'](https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html)? – PPartisan

+0

これは大丈夫ですが、ViewGroup.LayoutParamsを使用すると、aktUIItemParams.leftMarginは利用できません。:( (申し訳ありません、私は以前に書いていませんでした...私はgetIntrinsicWidth()にアクセスする必要があります... Height()およびitem leftMarginおよびtopMarginプロパティ) – Zoltan

+0

私はあなたがすでに受け入れられた回答を持っていることを理解していますが、['ViewGroup.MarginLayoutParams'](https://developer.android.com/reference/android/view /ViewGroup.MarginLayoutParams.html)には、必要なすべてのメソッド/フィールドが含まれています。もしそうであれば、キャストを避けることができます。 – PPartisan

答えて

1

ViewGroup.LayoutParams場合は文句を言わない仕事:

ViewGroup.LayoutParams layoutParams = aktUIItem.getLayoutParams(); 

if (layoutParams instanceof FrameLayout.LayoutParams) { 
    FrameLayout.LayoutParams frameLayoutParams = (FrameLayout.LayoutParams)layoutParams; 
    ...// do that old school logic 
} 
// ignore layoutParams or do another instance of check. 

私はあなたがサブクラスに目を通すお勧めします(ダイレクトと間接的に)どのサブクラスがあなたが呼び出す必要があるメソッドを提供するかを決定するためにリンクされているGoogleドキュメントのPPartisanリンク(here)に記載されています。次に、必要なメソッドがまだ残っているスーパークラスを呼び出します。そうすれば、必要なinstanceofチェックの数を最小限に抑えることができます。

+0

ありがとう、それはうまく動作します!:) – Zoltan

関連する問題