2016-11-04 7 views
3

私はレイアウトを動的に作成しました。それはいくつかの編集テキスト、テキストビュー、スピナーなどを持っています。Androidはinstanceof EditTextとinstanceof TextViewを同じものとして検出します

その後、私はそれらのビューで紹介する情報を入手しなければなりません。

ので、イムは、この

for(int i=0;i <= childs;i++){ 
     View v=parent.getChildAt(i); 
      if (v instanceof TextView) { 
       //do something 
      } 
      else if (v instanceof EditText) { 
       //do OTHER thing 
      } 

のようなものをやってここでの問題は、ViewTextViewまたはEdittext(私はスピナーやボタンで問題がない)のいずれかであるとき、AndroidはTextViewとして常にvを検知することです。

どうすればこの問題を解決できますか?

答えて

5

EditTextTextViewに拡張されているためです。

スイッチチェックの順序:

if (v instanceof EditText) { 
    //do something 
} else if (v instanceof TextView) { 
    //do OTHER thing 
} 
+0

これは機能します。前にそのオプションを見たことがありませんでした。ありがとうございました。 –

+1

27秒遅すぎる:Dあなたはそれにふさわしい:D +1 – Vucko

2

スイッチif文の順序。 if (v instanceof EditText)を先頭に置き、最初にその番号を確認します。これは、EditTextが直接延長されている(間接の場合は同じ)TextViewなので、何かがEditTextのときは自動的にTextViewであるため、instanceofもそこにtrueを返します。

3

VuckoとOgnianが述べたように

if (v.getClass().equals(TextView.class)) { 
    /* ... */ 
} else if (v.getClass().equals(Spinner.class)) { 
    /* ... */ 
} 

を使用し、特定のクラスをチェックするために、EditTextは、あなたが期待どおりにinstanceofが動作しない理由です、TextViewを拡張します。