2016-06-14 4 views
0

助けてもらえますか関数呼び出しのポップアップ

私はpopupという名前の関数で作成したポップアップを持っています。また、ユーザーがpopupwindowのボタンをクリックするとpopupWindowを閉じるという別の機能もあります。私は解雇のための別個の機能を作りました。 popupwindowをdismiss関数に渡したいのですが、これを行うための最良の方法は何ですか。私は却下機能を再利用したいと思います。

public class MainActivity extends AppCompatActivity { 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 

public void popup(View v) { 
    LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
    View layout = layoutInflater.inflate(R.layout.activity_alert_dialog,null); 
    final PopupWindow popup= new PopupWindow(layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

    View vi=(View) findViewByID(R.id.Layout); 
    popup.showAtLocation(vi, 0, 20, -50); 

} 

public void dismiss(View v) { 
    popup.dismiss(); 

} 
} 

方法を解任マイは、リソースのレイアウトファイル内から実行されます

<Button 
    android:text="cancel" 
    android:onClick="dismiss"/> 
+0

「public void dismiss(PopupWindow popup)」を実行してください。 終了が呼び出される前に、ポップアップが初期化されていることを確認してください。 – jitinsharma

+0

どのように 'dismiss()'を呼び出していますか?どこから ??コードを見せて.. !! –

+0

hiレイアウトリソースから呼び出されます。 –

答えて

1

以下のようにこのコードを試してください:あなたはpopup()を呼び出すときにポップアップが毎回作成されます。

public class MainActivity extends AppCompatActivity { 

    private PopupWindow mPopup = null; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void popup(View v) { 
     LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
     View layout = layoutInflater.inflate(R.layout.activity_alert_dialog,null); 

     // Use global variable instead of local. 
     //final PopupWindow popup= new PopupWindow(layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     mPopup= new PopupWindow(layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

     View vi=(View) findViewByID(R.id.Layout); 
     mPopup.showAtLocation(vi, 0, 20, -50); 
    } 

    public void dismiss(View v) { 
     if (mPopup != null && mPopup.isShowing()) { 
      mPopup.dismiss(); 
     }  
    } 
} 

そして、私はmPopup.showAtLocation(vi, 0, 20, -50);の位置の値について質問があります。 y = -50の正しい位置ですか?

私はこのポップアップがmoniterから表示されると思います。

+0

私が億万長者だったなら、今あなたに100万ドルを払っていただきたいと思います。それは少し画面外ですが、私はちょうどこの段階でアプリケーションの外観を心配していない機能を取得しようとしています。 –

+0

それは私の喜びです。 :)また、私はあなたの機能についての意見を持っています。この関数がオーバーライドでない場合は、各関数で使用されていないパラメータ 'View v'を削除することをお勧めします。 – Kae10

+0

これはありがたいことです:thats 1つは理解できませんでした - 何が@overrideが実際に意味するもの –

0

PopupWindowのグローバル変数を作成します。

private PopupWindow popup; 

    public void popup(View v) { 
     LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
     View layout = layoutInflater.inflate(R.layout.activity_alert_dialog,null); 
     popup= new PopupWindow(layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

     View vi=(View) findViewByID(R.id.Layout); 
     popup.showAtLocation(vi, 0, 20, -50); 

    } 

public void dismiss(View v) { 
    popup.dismiss(); 

} 
+0

を超えて更新されません - 次のエラーが表示されます。IllegalStateException:アクティビティのメソッドを実行できませんでした。上記のコードを追加しました。 –

+0

globla変数を追加すると、メインクラスの右にあります。 – KDeogharkar

+0

正しいのは、onCreate関数の上のメインクラスです。 –

関連する問題