2017-04-06 31 views
0

我正在嘗試創建一個對話框。所有的項目都會出現,它會響應觸摸,但標題不會顯示。我檢查了其他答案,他們建議在xml中將「windowNoTitle」設置爲「false」,但這沒有幫助。在構建對話框之後也不會嘗試「setTitle」(現在就是這樣寫的)。爲什麼我的標題不出現?對話框標題不會出現在Android中

這裏是MainActivity代碼:

package samapps.myfirstapp; 

import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 

public class MainActivity extends AppCompatActivity implements DialogTest.OnFragmentInteractionListener{ 

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

    @Override 
    public void onButtonClick(int result){ 
     Log.d("tag","Executed on click"); 
    } 

    //Called when the Send button is tapped 
    public void sendMessage(View view){ 
     String[] text = {"Test 1","Test 2","Test 3"}; 
     String title = "Test Title"; 
     DialogFragment fragment = new DialogTest(); 
     Bundle args = new Bundle(); 
     args.putString("title_question",title); 
     args.putStringArray("choices",text); 
     fragment.setArguments(args); 
     fragment.show(getSupportFragmentManager(),"testtest123"); 
     Log.d("tag","Executed after dialog"); 
} 

}

和對話片段:

package samapps.myfirstapp; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 



public class DialogTest extends DialogFragment { 
    // TODO: Rename parameter arguments, choose names that match 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 

    // TODO: Rename and change types of parameters 
    private String mParam1; 
    private String mParam2; 

    private OnFragmentInteractionListener mListener; 

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

    public interface OnFragmentInteractionListener { 
     public void onButtonClick(int result); 
    } 



    @Override 
    public Dialog onCreateDialog (Bundle savedInstanceState){ 
     Bundle theBundle = this.getArguments(); 

     String[] choices = theBundle.getStringArray("choices"); 
     String choiceTitle = theBundle.getString("choice_title"); 

     AlertDialog.Builder builder; 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ 
      builder = new AlertDialog.Builder(getActivity(),android.R.style.Theme_Material_Dialog_Alert); 
     } else { 
      builder = new AlertDialog.Builder(getActivity().getParent()); 
     } 
     builder.setTitle(choiceTitle); 

     builder.setItems(choices,new DialogInterface.OnClickListener(){ 
      public void onClick(DialogInterface dialog,int which){ 
       mListener.onButtonClick(which); 
      } 
     }); 

     Dialog thisDialog = builder.create(); 
     thisDialog.setTitle(choiceTitle); 
     return thisDialog; 
    } 


    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof OnFragmentInteractionListener) { 
      mListener = (OnFragmentInteractionListener) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 
    } 

} 

而對於它的價值,這裏的fragment_dialog_test.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="samapps.myfirstapp.DialogTest" 
    android:windowNoTitle="false" 
    style="@style/CustomDialog"> 

    <!-- TODO: Update blank fragment layout --> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_blank_fragment" /> 

</FrameLayout> 

這個在「Styles.xml」

<style name="CustomDialog" parent="Theme.AppCompat.Dialog"> 
    <item name="windowNoTitle">false</item> 
</style> 

回答

1

難道是因爲你設置標題與外鍵「」 title_question」但隨後的對話框中期待它與關鍵‘choice_title’

設置

嘗試更改爲

public void sendMessage(View view){ 
     String[] text = {"Test 1","Test 2","Test 3"}; 
     String title = "Test Title"; 
     DialogFragment fragment = new DialogTest(); 
     Bundle args = new Bundle(); 
     args.putString("title_question",title); 
     args.putStringArray("choices",text); 
     fragment.setArguments(args); 
     fragment.show(getSupportFragmentManager(),"testtest123"); 
     Log.d("tag","Executed after dialog"); 
+0

哦善良那是愚蠢的。謝謝一堆! –

2

在你DialogFragment,你正在使用錯誤的KEY拿到冠軍theBundle.getString("choice_title")。嘗試使用title_question

用途:

@Override 
public Dialog onCreateDialog (Bundle savedInstanceState){ 
    Bundle theBundle = this.getArguments(); 

    String[] choices = theBundle.getStringArray("choices"); 
    String choiceTitle = theBundle.getString("title_question"); 
    ........... 
}