2016-08-03 18 views
1

私は自分のアプリケーションにユーザーがポップアップを表示する単純なロジックを実装しようとしています。ポップアップには単にTextViewと情報メッセージが表示されます。このメッセージは、アプリケーションが起動され、新しいメッセージが表示されるたびに更新されます。 ポップアップのUIは私のアプリケーションUIと一致します。ポップアップの背景画像が必要なのかもしれません。また、このポップアップを閉じるために、ポップアップの右上隅に1つの閉じるボタン(X)が表示されます。AndroidのポップアップウィンドウとAndroidのダイアログ

ロジックの表示メッセージ:私はStringの配列に約100個の文字列が格納されています。この配列からランダムに1つの文字列を選択し、メッセージを表示するポップアップTextViewを入力します。私がここですでにやっていることよりも良いアプローチがあるかどうかを提案してください。また、1つのメッセージが選択された場合、他のメッセージが少なくとも1回は表示されるまで、同じメッセージが選択されないということも考えられます。

ロジックの表示ポップアップ:これは実装できません。私はどんなユーザでもポップアップを固定したくない。EventまたはButtonクリック。私はちょっと待ってからメッセージを表示したいと思っています。 -

Thread.sleep(3000);

ここでは、以下のコードを使用してPopupWindowを使用しようとしました。

PopupWindow infoPopup;  
LinearLayout infoLayout; 
TextView infoTextView; 
Button infoButton; 
infoTextView = new TextView(this); 
infoTextView.setText("Testing Popup Text"); 
infoTextView.setPadding(10,10,10,10); 
infoButton = new Button(this); 
infoButton.setText("Close");  
infoLayout = new LinearLayout(this); 
infoLayout.setOrientation(LinearLayout.VERTICAL); 
infoLayout.addView(infoTextView); 
infoLayout.addView(infoButton);  
infoPopup = new PopupWindow(infoLayout,LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 
infoPopup.setContentView(infoLayout);  
try { 
Thread.sleep(2000); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
}  
infoPopup.showAtLocation((CoordinatorLayout)findViewById(R.id.main_content),Gravity.CENTER,100,100); 

しかし、このポップアップは私

(CoordinatorLayout)findViewById(R.id.main_content)

パラメータにNULLポインタを与える最後の行でエラーを示しています。私は取得しています

問題は、次のとおりです。すべての

  1. まず、これはカスタムUIのポップアップを示すの正しいアプローチであれば、私はわかりません。私はAlertDialogを知っていますが、この場合にはどのオプションが最適かわかりません - お勧めします。

  2. なぜCoordinatorLayoutがヌルポインタを表示していますか?

  3. このポップアップで右上(X)ボタンロジックを実装する方法は?

答えて

1

1.はいアンドロイドのカスタムUIのポップアップを表示するための非常に多くのオプションがあります。 PopupWindowAlertDialogまたはダイアログActivityから1つを選択できます。どのスーツに最適かを決める必要があります。

UIをたくさんカスタマイズしてリストや複雑なGUIを表示する必要がある場合はActivitytheme.Dialogで起動することをお勧めします。ちょうどActivityのテーマをこのようなものに設定してください。android:theme="@android:style/Theme.Holo.Light.Dialog"ダイアログActivityを実装するためのチュートリアルがたくさんあります。

PopupWindowは、画面の任意の場所にカスタムポップアップをカスタマイズするための別のツールです。このポップアップを常に画面の中央に表示している場合は、これを使用しないことを提案したいと思います。 AlertDialogは正常に動作するはずです。

AlertDialogには多くの亜種がありますが、私があなたの問題を引き受けることができる限り、この1つはあなたに最も適しています。ダイアログの右上隅に十字ボタンを置くこともできます(AlertDialogにカスタムレイアウトを提供できるので、どこにでもアイコンを設定できます)。個人的に私はこのlibraryを使って私のAlertDialogにカスタムレイアウトを提供しています。あなたもこれを見ることができます。

NullPointerExceptionは単純です。レイアウトにはmain_contentという名前のIDはありません。これで問題が解決しない場合は、logcatを投稿してください。レイアウトも投稿してください。

3.私が前に言ったように、私はAlertDialogにカスタムレイアウトを提供するためにライブラリを使用しています。あなたもそれを見ることができます。したがって、このライブラリを実装すると、クロスボタンで独自のレイアウトを簡単に設計し、onClickの機能を簡単に実装できます。

これが役に立ちます。

+1

ありがとうReaz。私はあなたの助言に努めます。私は個人的にあなたが提案したダイアログアクティビティが好きですが、cutom gitライブラリを使ってAlertDialogを使うことも悪い考えではありません。私はそれを適用すると答えとしてあなたの印をつけるでしょう。また、私のレイアウトファイルにはmain_contentレイアウトがあります。それはそれを選んでいないだけだった。私は解決策を見つけるために取り組んでいます。私が見つけたらlogcatとソリューションを投稿します!再度、感謝します! –

+1

私は最終的にこの機能のカスタムダイアログを使用して終了しました。出来た! –

+0

これを聞いてよろしいです! –

関連する問題