• 締切済み

EditTextからフォーカスを外す処理

Androidのプログラミングで、EditText(入力widget)をExcelのセルのように5つ並べて計算させる画面があります。 XML上のEditTextは5つあり、下記はボタン[btnUpdate]をクリックしたとき、5つめのEditTextにフォーカスが1度あたる(カーソルが入る)ようになっています。 EditText editText5 = (EditText)findViewById(R.id.editText5); editText5.setOnFocusChangeListener(this); Button btnUpdate = (TextView)findViewById(R.id.btnUpdate); btnUpdate.setOnClickListener(this); btnUpdate.setOnFocusChangeListener(this); //以下、メソッド部 ==========================/ @Override public void onClick(View v) { if(v == btnUpdate) { editText5.requestFocus(); // EditText5にフォーカスをあてる    (EditText同士の計算処理) //* ここにフォーカスが外れる記述をしたい */ } } カーソルがeditText5に入った状態(フォーカスがあたったまま)になると、editText1~5の数字が計算されるようになっています。 カーソルが点滅した状態で処理が終わるのですが、処理後はカーソル点滅をやめたいので、editTextからフォーカスをはずしたいと思っています。 質問:カーソルが消える(処理後フォーカスがすべてのEditTextから外れる)状態にする記述(requestFocus();の逆のメソッド)がわかりません。 よろしくお願いします。

  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

btnUpdate(に限らず別のオブジェクト)にフォーカスを与えれば、editText5からフォーカスは失われます。 フォーカスを失わせる命令を作るとすると、次にどのオブジェクトにフォーカスを持たせるかという問題が出てきます。他のオブジェクトがフォーカスを得る=現在のオブジェクトのフォーカスが失われる、としたほうがシステム的にも自然です。

monedge
質問者

お礼

回答ありがとうございました。 booleanのフラグを別途つくり、他のオブジェクトにフォーカスがあたったときfalseが得られる形でeditText5からフォーカスが外れた判定をすることにしました。

関連するQ&A

  • Javaの質問です(引数の中でメソッド定義?)

    お世話になります。 現在、Javaについて勉強しておりまして一つ不明な点があり投稿させていただきました。 まずはソースをご覧ください。 ---------------------------------------------------------------------------------------------- button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Main.this, Editor.class); TextView textView = (TextView)findViewById(R.id.TextView01); CharSequence text = textView.getText(); intent.putExtra("TEXT", text + "000"); startActivityForResult(intent, SHOW_EDITOR); } }); ---------------------------------------------------------------------------------------------- 上記はサンプルプログラムから一部抜粋したものですが button.setOnClickListenerの引数でnew演算子を使用しており、 尚かつonClickメソッドをオーバーライドして定義しています。 C++開発経験者の私としては非常に見づらいのですが、こんな書き方って結構使うんでしょうか? これがイマイチ理解できていません。 この書き方をネットで探しても見つからなかったため、こちらでご質問させていただきました。 どなたかご教授願います。

  • Androidのレイアウトについて

    XMLで作成したTextViewを処理中に色を変えることは出来ないのでしょうか? 下記のようにやれば実装できるのでは?と思ってやってみましたがダメでした、 XMLファイルを使った方法で文字の色を変更する事は可能ですか? hogehoge.xml---------------------------------------------- <TextView android:id="@+id/text" android:textColor="@color/black" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="hogehoge" /> hogehoge.java--------------------------------------------- EditText textView=(EditText)findViewById(R.id.text); textView.setTextColor(Color.RED); ---------------------------------------------------------

  • プログラムについて

    androidのプログラムになりますが、教えていただきたくお願いします。 テキストに名前とE-mailを書いてボタンを押すと記憶されるプリファレンスの簡単なプログラムを書いていますが、うまく記憶できません。 ひとつのクラスにすれば問題なく記憶されるのですが、仕様でわざと2つのファイルに分けています。 お手数ですが、どなたか教えてください。 //メインのクラス(名前とE-mailを書いてもらう) public class ReiActivity extends Activity implements LocationListener,View.OnClickListener{ EditText editText1; EditText editText2; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editText1=(EditText)this.findViewById(R.id.editText1); editText1.setOnClickListener(this); editText2=(EditText)this.findViewById(R.id.editText2); editText2.setOnClickListener(this); if(v==button3){ String n=editText1.getText().toString(); String m=editText2.getText().toString(); Preference preference=new Preference(n,m); preference.prefernces(); Toast.makeText(ReiActivity.this, "登録しました。",   Toast.LENGTH_LONG).show();} //ここから別ファイルの別クラス(記憶させるプリファレンス) public class Preference extends Activity{ String n; String m; public Preference(String n,String m){ this.n=n; this.m=m; } public void prefernces(){ //下の行でエラーが起こる SharedPreferences pref=getSharedPreferences("profLog", MODE_PRIVATE); SharedPreferences.Editor editor=pref.edit(); editor.putString("Tel",n); editor.putString("E_mail",m); editor.commit(); } }

    • ベストアンサー
    • Java
  • 2つのEditTextに同じ関数を使いたい

    お世話になります。 JAVA eclipseでアプリを作成しています。 下記のソースで、onCreate時に、 (5行目)HogeText1に対して、「override:onCreateActionMode」で 処理を追加しています。 この処理を,HogeText2に対しても同じ処理を入れたいたのですが、 どのようにすれば、綺麗にかけるでしょうか? ※現在は、 final EditText editText = (EditText) findViewById(R.id.HogeText1); 以下の文を final EditText editText = (EditText) findViewById(R.id.HogeText2); にして、テキストビューの数、繰り返しています。 何卒宜しくお願いします。 -------------------------------- public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText editText = (EditText) findViewById(R.id.HogeText1); editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { menu.removeItem(android.R.id.paste); menu.removeItem(android.R.id.cut); menu.removeItem(android.R.id.copy); } }; ------------------------------------------

    • ベストアンサー
    • Java
  • nullpointexceptionについて

    プログラミング初心者です。 エラーが全くわかりません。 ボタンを押すと、リストビューに移動するというものなんですが、ボタンを押すとnullpointexceptionが出ます。 最後の、et.setText(str);でエラーになっているようなんですが、 お分かりになる方いらっしゃいますか・・・? よろしくお願いいたします。 public class MainActivity extends Activity { EditText text_naiyou =null; Button save=null; Button buck=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); save=(Button)findViewById(R.id.save); buck=(Button)findViewById(R.id.buck); text_naiyou=(EditText)findViewById(R.id.text_naiyou); save.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EditText et = (EditText)findViewById(R.id.text_naiyou); String str = et.getText().toString(); Intent intent = new Intent(); intent.setClass(getApplicationContext(), ListActivity.class); String pkg = getPackageName(); intent.putExtra(pkg + ".input",str); startActivity(intent); public class ListActivity extends Activity { EditText text_naiyou =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); Intent intent = getIntent(); String pkg = getPackageName(); String str = intent.getStringExtra(pkg + ".input"); EditText et = (EditText)findViewById(R.id.text_naiyou); et.setText(str);

  • Chorometerで一時停止した後再開の実装

    Chorometerで一時停止後リスタートの実装がわからないんです。 ソースコード上ではあってるはずなのに現状ではどうしても画面が呼び出されたときにChorometerが開始される、0:05時に一時停止ボタンを押す→5秒後に0:05にはならず0:10になってしまいます。 どうしてそうなるかをお願いします。 package com.exploreralpha; import java.io.IOException; import java.text.BreakIterator; import android.media.MediaPlayer.OnCompletionListener; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.media.MediaPlayer; import android.os.Bundle; import android.os.SystemClock; import android.provider.MediaStore; import android.provider.MediaStore.Audio.AudioColumns; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Chronometer; import android.widget.Chronometer.OnChronometerTickListener; import android.widget.ProgressBar; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; //音楽再生,音楽停止,巻き戻し,繰り返し再生,一時停止,自前コントローラの機能を保有するクラス public class MusicPlayer extends Activity implements OnClickListener, OnCompletionListener { TextView textView; TextView musicEndTime; MediaPlayer music; Button playButton;//音楽再生/一時停止ボタン Button rewindButton;//巻き戻しボタン Button repetMusicButton;//繰り返し再生ボタン Chronometer chorotemer; Long startTime;//開始時間 Long stopTime;//停止時間 int duration;//ファイルの長さ(時間)を取得する変数 int currnetPosion;//現在の再生位置を取得する変数 TextView title;//曲名 TextView artst;//アーティスト名 TextView album;//アルバム名 AlertDialog.Builder dialog; SeekBar seekBar; boolean startFlag; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.music); music =new MediaPlayer(); musicPlay(); //それぞれのリソースIDを取得 playButton=(Button)findViewById(R.id.musicPuse_id); rewindButton=(Button)findViewById(R.id.rewind_id); repetMusicButton=(Button)findViewById(R.id.repetMusic_id); musicEndTime =(TextView)findViewById(R.id.musicEndtime); chorotemer=(Chronometer)findViewById(R.id.startTimer_id); artst =(TextView)findViewById(R.id.artstText_id); //それぞれのボタンが押された時の処理をセットするためsetOnClickListenerインタフェースを //それぞれのボタンにセットしてMusicPlayer本体に実装する playButton.setOnClickListener(this); rewindButton.setOnClickListener(this); repetMusicButton.setOnClickListener(this); music.setOnCompletionListener(this); chorotemer=(Chronometer)findViewById(R.id.startTimer_id); //最初に画面が生成した時に再生ボタンの画像を割り当てる playButton.setBackgroundResource(R.drawable.pause); initMediaDate(); duration =music.getDuration(); String timeStr=TimeText(duration); musicEndTime.setText(timeStr); // 初期値の設定 設定しないと端末が起動してからの時間からスタート if(music.isPlaying()){ startTime=SystemClock.elapsedRealtime(); chorotemer.setBase(startTime); chorotemer.start(); } } /** *@param v * 音楽再生ボタン,音楽停止ボタン,音楽一時停止ボタン,巻き戻しボタンが繰り返し再生ボタンが押された時の処理 */ public void onClick(View v) { if(v==playButton){//一時停止ボタンが押された時の処理 stopTime=SystemClock.elapsedRealtime(); if(music.isPlaying()){//音楽が再生されている時 playButton.setBackgroundResource(R.drawable.musicplay); //Toast.makeText(this, "一時停止されました。", Toast.LENGTH_LONG).show(); music.pause();//一時停止する chorotemer.stop(); }else{//音楽が再生されていない時 playButton.setBackgroundResource(R.drawable.musicpause); //Toast.makeText(this, "再生されました。", Toast.LENGTH_LONG).show(); Long time_1=stopTime-startTime; chorotemer.setBase(SystemClock.elapsedRealtime()-time_1); chorotemer.start(); music.start(); } }

  • android.R.id.text1はどこにある

    androidアプリ開発 を読みながら、作業しています。 ( 184ページ ) サンプルのコード SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( this, g_list, android.R.layout.simple_expandable_list_item_1, new String[] { "group_title"}, new int[]{android.R.id.text1 }, c_list, android.R.layout.simple_expandable_list_item_2, new String[] {"child_title", "child_text" }, new int[] { android.R.id.text1, android.R.id.text2 } ); elv.setAdapter(adapter); elv.setOnChildClickListener( new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { TextView txt = (TextView) ((TwoLineListItem) v).findViewById(android.R.id.text1); Toast.makeText(AddrListShowActivity.this, txt.getText(), Toast.LENGTH_LONG).show(); return false; } } は、動くのですが、欲張って SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( this, g_list, android.R.layout.simple_expandable_list_item_1, new String[] { "group_title"}, new int[]{android.R.id.text1 }, c_list, android.R.layout.simple_expandable_list_item_2, new String[] {"child_title", "child_text" }, new int[] { android.R.id.text2, android.R.id.text3 } ); elv.setAdapter(adapter); elv.setOnChildClickListener( new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { TextView txt = (TextView) ((TwoLineListItem) v).findViewById(android.R.id.text1); Toast.makeText(AddrListShowActivity.this, txt.getText(), Toast.LENGTH_LONG).show(); TextView txt2 = (TextView) ((TwoLineListItem) v).findViewById(android.R.id.text2); Toast.makeText(AddrListShowActivity.this, txt2.getText(), Toast.LENGTH_LONG).show(); TextView txt3 = (TextView) ((TwoLineListItem) v).findViewById(android.R.id.text3); Toast.makeText(AddrListShowActivity.this, txt3.getText(), Toast.LENGTH_LONG).show(); return false; } } とすると、android.R.id.text3  が原因で動きません。 そもそも、android.R.id.text1 の  text1 は何処にあるのでしょうか。 アドバイスよろしくお願いします。  

  • Android JAVAへでの質問です

    (←※この部分!) の意味がわからないのでどなたか教えていただけないでしょうか? private EditText edit1; ですが、なぜ private がついているのでしょうか?なくても動きましたが何か意味があるのでしょうか? そしてどうして、この子はここにいるのでしょうか? Button btn1 と一緒に仲良くいてもいいんじゃないでしょうか? ================ import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.view.*; import android.view.View.OnClickListener; import android.widget.*; public class Test2Activity extends Activity { private EditText edit1;(←※この部分!) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit1 = (EditText)this.findViewById(R.id.EditText1); Button btn1 = (Button)this.findViewById(R.id.button1); btn1.setOnClickListener(new MyClickA()); } class MyClickA implements OnClickListener { public void onClick(View view){ Editable e = edit1.getText(); int n = Integer.parseInt(e.toString()); Toast toast = Toast.makeText(getApplicationContext(), "数値=" + n, Toast.LENGTH_SHORT); toast.show(); } } }

    • ベストアンサー
    • Java
  • Androidアプリのクリック処理

    とても初歩的な問題で申し訳ないのですが、 3日悩んで解決できなかったので、質問させてください。 現在、Androidアプリの修正を行っています。 現状: 画面いっぱいにWebViewを表示させ、あるサイトを表示させる 改修案: 画面下にボタンを1つ追加し、このボタンをタップすると別サイトを表示させたい 表示するサイトは、サーバー上の特定テキストファイルから引っこ抜いてくる ※現状のアプリは、他の人から引き継がれたもので、当時開発には一切関わっておりません。 まず、XMLファイルでボタンを追加し、IDを「button1」としました。 次に、ActivityクラスにLoaderCallbacksクラスを継承しました。 同時に、AsyncTaskLoaderクラスを作成し、非同期でテキストファイルの内容を取得し、 任意のサイトを表示させる、というところまでは完成しています。 最後に、ボタンタップでクリック処理を行う、というところなのですが、 ここでつまづいてしまいました。 public class Frame extends Activity implements View.OnClickListener, LoaderCallbacks<xxxxxx> { private Button nextButton; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // レイアウトで指定したWebViewのIDを指定する。 nextButton = (Button)findViewById(R.id.button1); setContentView(R.layout.frame); // クリック処理をセット nextButton.setOnClickListener(this);   ←ここでNullPointerException発生!        } public void onClick(View v) { if (v == nextButton) { // ここに、ボタンタップ後に行う処理を記述 } } } 追加した部分だけを抜き出したのが上記の処理なのですが、 onCreate内の【nextButton.setOnClickListener(this)】の部分で、 NullPointerExceptionが発生してしまいます。 この部分だけコメントアウトすると処理はとりあえず通るのですが、 クリック処理を受け取る設定ができていないので、もちろんボタンをタップしても 何もイベントは発生しません。 初歩的な質問で大変申し訳ないのですが、本当に解決法が分からず困っています。 どうぞ知恵をお貸しください、よろしくお願いします。

  • スワイプ画面でのonclick処理について

    先日、以下のサイトを参考にスワイプ画面を作成しましたが スワイプ画面でボタンをクリックする処理が実装できませんでした。 http://web-dou.com/android/swipe.html ページをA⇔B⇔Cとスワイプで遷移することができ、 Aの画面でAのレイアウトに配置したボタンを押すと ある処理を行うというものです。 以下のコードを3つの上記のスワイプを管理するソースコードに記述したところ、 「NullPointerException」というエラーが発生しました。 m_button = (Button)findViewById(R.id.button01); m_button.setOnClickListener(this); 以前した質問(http://okwave.jp/qa/q8826506.html)で回答していただいた通り、 参考にさせていただいた方法ではOnclick処理は実装できないのでしょうか? もし実装できないのであればスワイプ画面でOnclick処理を行う方法について 教えていただければと思います。 回答よろしくお願いします。