タグ付けされた質問 「android-fragments」

フラグメントは、Androidアプリの再利用可能な動作またはユーザーインターフェースの一部を表します。

30
フラグメント内のfindViewById
フラグメントのXMLで作成したImageView要素を参照するフラグメントでImageViewを作成しようとしています。ただし、このfindViewByIdメソッドは、Activityクラスを拡張する場合にのみ機能します。とにかくフラグメントで使用できるものはありますか? public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ImageView imageView = (ImageView)findViewById(R.id.my_image); return inflater.inflate(R.layout.testclassfragment, container, false); } } findViewByIdメソッドは、メソッドが定義されていないことを述べ、その上にエラーが発生しました。

30
onActivityResultがフラグメントで呼び出されていません
このフラグメントをホストするonActivityResultアクティビティは、カメラアクティビティが戻ったときに呼び出されます。 私のフラグメントは、カメラが写真を撮るために送信された意図で結果のアクティビティを開始します。画像アプリケーションは正常に読み込まれ、写真を撮って戻ります。onActivityResultしかし、ヒットされることはありません。ブレークポイントを設定しましたが、何もトリガーされません。フラグメントは持つことができますonActivityResultか?提供機能なのでそう思います。なぜこれがトリガーされないのですか? ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image); myImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, 1888); } }); @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if( requestCode == 1888 ) { Bitmap photo = (Bitmap) data.getExtras().get("data"); ((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo); } }

14
ジレンマ:フラグメントvsアクティビティを使用する場合:
Activitiesアプリケーションの単一の画面を表すFragmentsように設計されている一方で、ロジックが埋め込まれた再利用可能なUIレイアウトとして設計されていることは知っています。 ずっと前まで、開発すべきだと言っていたアプリケーションを開発しました。Activityアプリケーションの画面を表すを作成し、ViewPagerまたはのフラグメントを使用しましたGoogle Maps。ListFragment何度か再利用できるUIやその他のUIを作成することはめったにありません。 最近、私は唯一の2含むプロジェクトにつまずいActivities1がありSettingsActivity、他方ですMainActivity。のレイアウトには、MainActivity非表示のフルスクリーンUIフラグメントが多数含まれており、1つだけが表示されています。Activity論理多く存在するFragmentTransitionsアプリケーションの異なる画面間。 このアプローチについて私が気に入ったのは、アプリケーションがを使用しているため、ActionBarそのままの状態であり、画面切り替えアニメーションと一緒に移動しないことActivityです。これにより、画面の遷移がより滑らかになります。 だから私はこのトピックに関するあなたの現在の開発方法を共有することを求めていると思います、それは一見すると意見ベースの質問のように見えるかもしれませんが、私はそれをAndroidの設計とアーキテクチャの質問と見なします...実際には意見ベースのもの。 UPDATE(2014年1月5日):によってこのプレゼンテーションに続いて、エリック・バークから広場、(私が言っているのAndroid開発者のための便利なツールの多くの偉大なプレゼンテーションであると私は広場にどのような方法で関連しておりません) http://www.infoq.com/presentations/Android-Design/ 過去数か月の個人的な経験から、アプリケーションを構築する最善の方法は、アプリケーションのフローを表すフラグメントのグループを作成し、それらすべてのフラグメントを1つに表示することであることがわかりましたActivity。したがって、基本的にActivitiesは、アプリケーション内のフローの数と同じ数になります。そうすることで、アクションバーはすべてのフローの画面にそのまま残りますが、フローを変更すると再作成されるため、非常に理にかなっています。エリックバークが述べているように、そして私も実現しActivitiesたように、彼が「神」の活動と呼んでいるものを混乱させるので、できるだけ少ないものを使用するという哲学はすべての状況に当てはまるわけではありません。

24
フラグメントがViewPagerに表示される時期を判断する方法
問題:フラグメントonResume()にはViewPagerフラグメントが実際に目に見えるようになる前に発射されます。 たとえば、との2つのフラグメントがViewPagerありFragmentPagerAdapterます。2番目のフラグメントは許可されたユーザーのみが使用でき、フラグメントが表示されたときに(アラートダイアログを使用して)ログインするようユーザーに要求する必要があります。 しかし、ViewPagerは、2番目のフラグメントをキャッシュするために最初のフラグメントが表示されるときに2番目のフラグメントを作成し、ユーザーがスワイプを開始するとそれを表示します。 したがって、onResume()イベントは、2番目のフラグメントで表示されるずっと前に発生します。そのため、2番目のフラグメントが表示されて適切なタイミングでダイアログが表示されたときに発生するイベントを見つけようとしています。 これはどのように行うことができますか?

13
新しいAndroidフラグメントをインスタンス化するためのベストプラクティス
アプリケーションで新しいフラグメントをインスタンス化するための2つの一般的なプラクティスを見てきました。 Fragment newFragment = new MyFragment(); そして Fragment newFragment = MyFragment.newInstance(); 2番目のオプションは、静的メソッドを使用するnewInstance()と、一般的に次のような方法が含まれています。 public static Fragment newInstance() { MyFragment myFragment = new MyFragment(); return myFragment; } 最初、主な利点は、フラグメントの新しいインスタンスを作成するときに柔軟性を与えるためにnewInstance()メソッドをオーバーロードできるということでしたが、フラグメントのオーバーロードされたコンストラクターを作成することによってもこれを行うことができました。 私は何か見落としてますか? あるアプローチが他のアプローチより優れている点は何ですか?それともそれはただ良い習慣ですか?

30
フラグメントでのコンテキストの使用
フラグメントのコンテキストを取得するにはどうすればよいですか? コンストラクターがコンテキストで使用するデータベースを使用する必要がgetApplicationContext()ありFragmentClass.thisますが、機能しません。どうすればよいですか? データベースコンストラクタ public Database(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); }

30
IllegalStateException:ViewPagerでonSaveInstanceStateの後にこのアクションを実行できません
市場のアプリからユーザーレポートを取得していますが、次の例外があります。 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109) at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399) at android.app.Activity.onBackPressed(Activity.java:2066) at android.app.Activity.onKeyUp(Activity.java:2044) at android.view.KeyEvent.dispatch(KeyEvent.java:2529) at android.app.Activity.dispatchKeyEvent(Activity.java:2274) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277) at android.app.Activity.dispatchKeyEvent(Activity.java:2269) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.widget.TabHost.dispatchKeyEvent(TabHost.java:297) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at …

10
ViewPagerとフラグメント—フラグメントの状態を保存する正しい方法は何ですか?
フラグメントは、UIロジックをいくつかのモジュールに分離するのに非常に適しているようです。しかし、ViewPagerそのライフサイクルとともに、私にはまだ霧がかかっています。だからグルの考えはひどく必要です! 編集する 以下のばかげた解決策を参照してください;-) 範囲 メインアクティビティにはViewPagerフラグメントがあります。これらのフラグメントは、他の(サブメイン)アクティビティに対して少し異なるロジックを実装できるため、フラグメントのデータはアクティビティ内のコールバックインターフェイスを介して入力されます。そして、すべては最初の起動で正常に動作しますが、!... 問題 アクティビティが再作成されたとき(たとえば、方向が変更されたとき)ViewPagerのフラグメントを作成します。コード(以下にあります)は、アクティビティが作成されるたびに、ViewPagerフラグメントと同じ新しいフラグメントアダプターを作成しようとする(多分これが問題である)と述べていますが、FragmentManagerはすでにこれらのフラグメントをどこかに(どこに?)格納しています。それらのレクリエーションメカニズムを開始します。したがって、レクリエーションメカニズムは、アクティビティの実装されたメソッドを介してデータを開始するためのコールバックインターフェース呼び出しで「古い」フラグメントのonAttach、onCreateViewなどを呼び出します。ただし、このメソッドは、アクティビティのonCreateメソッドで作成された、新しく作成されたフラグメントを指します。 問題 多分私は間違ったパターンを使用していますが、Android 3 Proの本でさえそれについてあまり詳しくありません。だから、してください、私に一から二パンチを与え、それを正しい方法を行う方法を指摘しています。どうもありがとう! コード 主な活動 public class DashboardActivity extends BasePagerActivity implements OnMessageListActionListener { private MessagesFragment mMessagesFragment; @Override protected void onCreate(Bundle savedInstanceState) { Logger.d("Dash onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_container); new DefaultToolbar(this); // create fragments to use mMessagesFragment = new MessagesFragment(); mStreamsFragment = new StreamsFragment(); // …

6
フラグメントのインスタンス状態をバックスタックに正しく保存するにはどうすればよいですか?
SOで同様の質問の多くの事例を見つけましたが、残念ながら私の要件を満たす回答はありません。 縦向きと横向きのレイアウトが異なり、バックスタックを使用しています。これにより、setRetainState()構成変更ルーチンを使用できなくなり、トリックを使用できなくなります。 デフォルトのハンドラーに保存されない特定の情報をTextViewでユーザーに表示します。アクティビティのみを使用してアプリケーションを作成する場合、以下がうまく機能しました。 TextView vstup; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.whatever); vstup = (TextView)findViewById(R.id.whatever); /* (...) */ } @Override public void onSaveInstanceState(Bundle state) { super.onSaveInstanceState(state); state.putCharSequence(App.VSTUP, vstup.getText()); } @Override public void onRestoreInstanceState(Bundle state) { super.onRestoreInstanceState(state); vstup.setText(state.getCharSequence(App.VSTUP)); } Fragmentこれが唯一の非常に特定の状況で動作します。具体的には、ひどく壊れるのは、フラグメントを置き換え、それをバックスタックに入れ、新しいフラグメントが表示されている間に画面を回転させることです。私が理解したところによると、古いフラグメントはonSaveInstanceState()置き換えられたときにへの呼び出しを受信しませんが、何らかの形でにリンクされたままでありActivity、このメソッドは、それViewが存在しないときに後で呼び出されるため、私TextViewの結果をに探しNullPointerExceptionます また、sを使用しても問題TextViewsがなかったFragmentとしても、s を使用した参照を維持することは良い考えではありませんActivity。その場合、onSaveInstanceState()実際には状態が保存されますが、フラグメントが非表示のときに画面を2度回転するonCreateView()と、新しいインスタンスで呼び出されないため、問題が再発します。 状態onDestroyView()をいくつかのBundleタイプのクラスメンバー要素(実際には1つだけではなく、より多くのデータですTextView)に保存し、onSaveInstanceState()それを保存することを考えましたが、他にも欠点があります。主に、フラグメントが現在表示されている場合、2つの関数を呼び出す順序が逆になるため、2つの異なる状況を考慮する必要があります。よりクリーンで正しい解決策が必要です!

10
なぜフラグメント化し、アクティビティの代わりにフラグメントを使用するのはいつですか?
Android API 11以降で、Googleはという新しいクラスをリリースしましたFragment。 動画では、Googleは可能な限り(ことを示唆しているリンク1、リンク2)、私たちが代わりに活動の断片を使用する必要がありますが、彼らは正確に理由を説明しませんでした。 フラグメントの目的とそれらのいくつかの可能な用途は何ですか(単純なビュー/レイアウトで簡単に実現できるいくつかのUIの例を除く)? 私の質問はフラグメントについてです: フラグメントを使用する目的は何ですか? アクティビティ/ビュー/レイアウトを使用する場合と比較して、フラグメントを使用する利点と欠点は何ですか? ボーナス質問: フラグメントの本当に興味深い使い方を教えてください。Googleが動画で言及しなかったことは? フラグメントとそれらを含むアクティビティの間で通信するための最良の方法は何ですか? フラグメントを使用するときに覚えておくべき最も重要なことは何ですか?あなたの経験からのヒントと警告はありますか?


30
現在表示されているフラグメントを取得するにはどうすればよいですか?
Androidでフラグメントを操作しています。 次のコードを使用してフラグメントを変更できることを知っています。 FragmentManager fragMgr = getSupportFragmentManager(); FragmentTransaction fragTrans = fragMgr.beginTransaction(); MyFragment myFragment = new MyFragment(); //my custom fragment fragTrans.replace(android.R.id.content, myFragment); fragTrans.addToBackStack(null); fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); fragTrans.commit(); 私の質問は、Javaファイルで、現在表示されているFragmentインスタンスを取得するにはどうすればよいですか?

18
フラグメント内のXML onClickを使用してボタンのクリックを処理する方法
Pre-Honeycomb(Android 3)では、各アクティビティはonClick、レイアウトのXMLのタグを介してボタンのクリックを処理するように登録されていました。 android:onClick="myClickMethod" そのメソッド内で使用できます view.getId()、switchステートメントを使用してボタンのロジックを実行できます。 Honeycombの導入により、これらのアクティビティをフラグメントに分割し、さまざまなアクティビティ内で再利用できるようにします。ボタンの動作のほとんどはアクティビティに依存せず、OnClickListenerボタンごとにを登録する古い(1.6より前の)メソッドを使用せずにコードをFragmentsファイル内に常駐させたい。 final Button button = (Button) findViewById(R.id.button_id); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click } }); 問題は、レイアウトがインフレートされても、個々のフラグメントではなく、ボタンのクリックを受け取っているのはホストアクティビティであることです。どちらにも良いアプローチはありますか フラグメントを登録してボタンのクリックを受け取りますか? アクティビティからクリックイベントを、それらが属するフラグメントに渡しますか?

19
Androidでフラグメントにオプションメニューを追加する方法
フラグメントのグループからオプションメニューにアイテムを追加しようとしています。 新しいを作成しました MenuFragmentクラスを、メニュー項目を含めたいフラグメントのためにこれを拡張しました。コードは次のとおりです。 Java: public class MenuFragment extends Fragment { MenuItem fav; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { fav = menu.add("add"); fav.setIcon(R.drawable.btn_star_big_off); } } コトリン: class MenuFragment : Fragment { lateinit var fav: MenuItem override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) …

11
アクティビティにアタッチされていないフラグメントMyFragment
私の問題を表す小さなテストアプリを作成しました。ActionBarSherlockを使用して(Sherlock)Fragmentsでタブを実装しています。 私のコード: TestActivity.java public class TestActivity extends SherlockFragmentActivity { private ActionBar actionBar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupTabs(savedInstanceState); } private void setupTabs(Bundle savedInstanceState) { actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); addTab1(); addTab2(); } private void addTab1() { Tab tab1 = actionBar.newTab(); tab1.setTag("1"); String tabText = "1"; tab1.setText(tabText); tab1.setTabListener(new TabListener<MyFragment>(TestActivity.this, "1", …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.