2016-10-27 5 views
3

onFocusChangedをオーバーライドして、フォーカスを失ったTextEditを特定します。重要なのは、このTextEditにテキストがない場合はこのTextEditを削除することです。問題はif((EditText...が無効であることです。私はcannot resolve method 'getText()'を得る。私はそれがEditTextビューであることを伝えるためにキャストしようとしました。動的に追加されたTextEditにテキストが含まれているかどうかを確認します。

listItemsViewはLinearLayoutのidであり、listItemsはEditTextのArrayListです。

@Override 
public void onFocusChange(View view, boolean hasFocus) { 
    if (!hasFocus) { 

     int removeCurrent = listItems.indexOf(this)+1; 
     // code to execute when EditText loses focus 
     if((EditText)view.getText().equals("")) { 

     } 
     listItemsView.removeViewAt(removeCurrent); 
     listItems.remove(removeCurrent); 
    } 
} 

私も試してみた:

if((EditText)listItemsView.getChildAt(removeCurrent).getText().equals("")) 

と同じ結果を得ました。

+0

あなたは(のEditText)view.getText()から任意の値を取得しているのtoString()。? – Radhey

+0

これは有効なメソッドではないため、コンパイルされません。 – Emsal

+0

あなたはedittext.gettext()を意味します。tostring()は有効ではありません! 、それはあなたのビューでキャストの問題かもしれない、私たちはあなたのアダプタファイルの完全なソースを表示させてください。 – Radhey

答えて

3

あなたは型に値をキャストしたい場合は、あなたがこれを行う:

(T)V 

Tは、あなたがにキャストしたい型であり、Vが値です。

これまでのところとても良いですか?あなたのコードで

(EditText)view.getText().equals("") 

V何であるとTは何ですか?答えはあなたを驚かせるかもしれません! Tは明らかにEditTextですが、Vは実際にはview.getText().equals("")です!

つまり、viewEditTextにキャストしませんでした。そのため、コンパイラはgetTextという名前のメソッドを見つけることができません。特にviewをキャストするようにコンパイラに指示するには、括弧を追加します。

((EditText)view).getText().equals("") 
+0

ああありがとう!テキストを取得するには、getText()の後にtoStringを追加する必要がありました。 – Emsal

+0

@Emsal私の答えがあなたの質問に答えると思うなら、そのチェックマークをクリックすることでそれを受け入れることを検討してください! – Sweeper

関連する問題