-2

donc je tentais de mettre en œuvre un dialogue alart avec un EditText dans un fragment Heres le code: 1.prompt_dialog.xmlComment utiliser le contexte et AlertDialog avec des fragments

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:orientation="vertical" 
    android:layout_height="match_parent"> 
    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Type your reminder title : " 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <EditText 
     android:id="@+id/editTextDialogUserInput" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

2.MainFragment.java

public class ReminderFragment extends Fragment implements View.OnClickListener { 

     final Context context = this; 

     public ReminderFragment() { 
        // Required empty public constructor 
      } 

      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

       View layout = inflater.inflate(R.layout.main_fragment_layout,container,false); 

       Button openDialog = (Button) layout.findViewById(R.id.openDialogButton); 
       openDialog .setOnClickListener(this); 


       return layout; 
      } 
     public void onClick(View view){ 

       LayoutInflater li = LayoutInflater.from(context); 
       View promptsView = li.inflate(R.layout.prompt_dialog, null); 

       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
        context); 

       // set prompts.xml to alertdialog builder 
       alertDialogBuilder.setView(promptsView); 
       // set dialog message 
       alertDialogBuilder 
         .setCancelable(false) 
         .setPositiveButton("Ok", 
          new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog,int id) { 

          } 
         }) 
         .setNegativeButton("Cancel", 
          new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog,int id) { 
           dialog.cancel(); 
          } 
         }); 
       AlertDialog alertDialog = alertDialogBuilder.create(); 
       alertDialog.show(); 
      } 
    } 

mais sur la variable de contexte final Context context = this; il une erreur en disant

Incompatible Types: 
     Required: android.content.Context 
     Found: com.example.user.packgename.MainFragment 

J'ai essayé d'utiliser le contexte sur une autre classe qui étend la classe Activity et utilisé ce code final Context context = this; il wokrs très bien, avec mon cas peut-être parce que son extension de la classe Fragment. Alors, comment puis-je résoudre le problème? Y at-il une autre façon de le faire?

Merci.

+0

utilisez getActivity(), lieu de contexte dans la classe Fragment – Mrinmoy

Répondre

1

Remplacez toutes les utilisations de context et utilisez getActivity() à la place.

Les quatre composants de base d'une application étendent les applications qui comprennent des Context - Activity, Service, BroadcastReceiver et ContentProvider. L'application elle-même s'étend également Context.

Pour effectuer des opérations liées à l'interface utilisateur, vous devez utiliser Context d'un Activity comme pour afficher AlertDialog.

final Context context = this; 

Cette ligne est valide tant qu'elle est écrite dans le cadre de l'un des composants répertoriés ci-dessus. Il ne fonctionnera pas dans un Fragment car il ne s'étend pas à Context, il utilise le contexte du parent Activity.

+0

Cela fonctionne merci pour votre réponse – surafel

+0

Vous pouvez accepter la réponse afin que les autres ne viennent pas ici à la recherche d'une question sans réponse. –

+0

"Avoir son propre contexte" est trompeur. Ces classes 'extend Context', donc elles sont un Context, elles n'en ont" pas ". –