Ally
Ally

Reputation: 11

How can I make a popup from a fragment on Android?

I have an activity file which uses a ViewPager to show different pages - each which are fragments with a video. I want some of the pages to have buttons which when I press turn into a pop up to display some information - is this possible?

I've tried this code below: Here is the code in my fragment java:

public class MassageandBeauty extends Fragment implements View.OnClickListener {
Button btnPopup;
showPopup showPopup;



@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.first_fragment, container, false);
    btnPopup = (Button)v.findViewById(R.id.cavern);
    btnPopup.setOnClickListener(this);
    return v;
}



//@Override
public void onViewCreated(View v) {
    btnPopup = (Button)v.findViewById(R.id.cavern);
    btnPopup.setOnClickListener(this);
}




//@Override
@Override
public void onClick(View parent) {
    new showPopup(getActivity().getApplicationContext()).cavern(parent);
}

Here is the code in my popup:

public class showPopup extends ActionBarActivity {
Context ctx;

public showPopup(Context ctx){
    this.ctx = ctx;
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_popup_layout);
    Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/Raleway-Black.ttf");
    TextView myTextView = (TextView)findViewById(R.id.textViewtop);
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    myTextView.setTypeface(myTypeface);
}





public void cavern(View parent) {
    final PopupWindow popup = new PopupWindow(ctx);

    ViewGroup.LayoutParams para = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

    TextView tvMessage = new TextView(ctx);
    Button btnDismiss = new Button(ctx);

    tvMessage.setLayoutParams(para);


    btnDismiss.findViewById(R.id.close);
    btnDismiss.setLayoutParams(para);
    btnDismiss.setWidth(20);
    btnDismiss.setHeight(10);
    btnDismiss.setText("x");
    popup.setContentView(btnDismiss);

    popup.setWidth(1200);
    popup.setHeight(800);
    popup.showAtLocation(parent, Gravity.CENTER_HORIZONTAL, 10, 10);
    popup.update();

    btnDismiss.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popup.dismiss();
        }
    });


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {




    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_popup_layout, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(new CalligraphyContextWrapper(newBase));
}

}

Here is the xml of my PopUp

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/showpopup"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:background="#8000"
android:orientation="vertical"

tools:context="morzineappy.morzineappy.showPopup">



<TextView
    android:id="@+id/textViewtop"
    android:layout_marginTop="5dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:textColor="#FFF"
    android:textSize="30sp"
    android:text="The Cavern" />

<Button
    android:id="@+id/close"
    android:layout_marginBottom="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginLeft="1200dp"
    android:layout_gravity="left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="x" />

<ImageView
    android:id="@+id/poster"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/cavern"
    android:layout_marginTop="20dp"
    android:layout_marginLeft="800dp"
    android:layout_marginRight="20dp"
    android:layout_gravity="right" />


    <TextView
        android:id="@+id/textViewtop"

        android:layout_width="800dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="20dp"
        android:layout_marginTop="60dp"
        android:layout_marginLeft="20dp"

        style="@style/BusinessFont"
        android:text="Text"
      />

For some reason it won't display the text in the popup- I want to add the layout into the popup but I'm not sure how- any ideas?!

Upvotes: 1

Views: 4230

Answers (2)

poisondminds
poisondminds

Reputation: 427

Your question is not very clear, but I'll assume that you're trying to use something like an AlertDialog. Typically when creating these, you need a Context object as an argument. In an Activity, you can usually create an AlertDialog like so:

AlertDialog d = new AlertDialog(this);

But I'm guessing that your issue is that since you are in a fragment, the this object is not a Context. So for you, it would be more like so:

AlertDialog d = new AlertDialog(getActivity());

Upvotes: 1

Max77
Max77

Reputation: 1566

First create your popup or message dialog with extending DialogFragment, then on button click:

MyDialogFragment dialog = new MyDialogFragment(....);
dialog.show(getActivity().getSupportFragmentManager(), "name of fragment here");

Upvotes: 1

Related Questions