-2

,所以我試圖實現一個片段與一個的EditText對話框alart繼承人代碼: 1.prompt_dialog.xml如何使用語境和AlertDialog與片段

<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(); 
      } 
    } 

,但是,從上下文變量final Context context = this;有一個錯誤,說

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

我試過在另一個類上使用上下文,它擴展了Activity類,並使用了這個代碼final Context context = this;它的手機 就好,我的情況可能是因爲它從Fragment類擴展。

那麼我該如何解決這個問題?有沒有其他方法可以做到這一點?

謝謝。

+0

使用getActivity(),在片段類上下文的位置 – Mrinmoy

回答

1

替換context的所有用法,並使用getActivity()代替它。

Android應用程序的所有四個基本部件延伸Context包含的 - ActivityServiceBroadcastReceiverContentProvider。應用程序本身也延伸到Context

要執行與UI相關的操作,您需要使用ContextActivity),如顯示AlertDialog

final Context context = this; 

只要它寫在上面列出的任何組件的範圍內,此行就是有效的。它不會在Fragment中工作,因爲它不會自行擴展Context,它使用父Activity的上下文。

+0

它的作品感謝您的回答 – surafel

+0

您可以接受答案,以便其他人不會來這裏尋找一個未答覆的問題。 –

+0

「有他們自己的上下文」是誤導性的。這些類「擴展上下文」,所以它們是一個上下文,它們不是「有一個」。 –