2013-09-06 2 views
1

Я довольно новичок в Android и получил кучу исходного кода клиента на работе, чтобы исправить. Диалог -фрагмент, который я пытаюсь создать, не останется открытым. Когда я выхожу через него, он открывается, а затем снова закрывается, когда вызывается newFragement.show().DialogFragment не отображается, он быстро открывается и закрывается

My onCreateDialog сообщает мне, что мой текущий targetSdk - 8, но я изменил его взад и вперед до 11 раз, даже перезапустил Android Studio, но все же говорит мне, что это неправильно.

До сих пор все другие сообщения, которые я нашел, связанные с этим, не ответили на мой вопрос. Мне не удалось заставить FragmentActivity работать. Вот мой код:

ShowUpgradeDialogFragment класс:

public class ShowUpgradeDialogFragment extends DialogFragment { 

public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the Builder class for convenient dialog construction 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    builder.setMessage(R.string.dialog_builder_message) 
      .setPositiveButton(R.string.dialog_builder_positive, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // upgrade 
       } 
      }) 
      .setNegativeButton(R.string.dialog_builder_negative, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // User cancelled the dialog 
       } 
      });//*/ 
    System.out.println ("hello"); 
    // Create the AlertDialog object and return it 
    AlertDialog dialog = builder.create(); 
    return dialog; 
    } 
} 

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.ila.tax_shield" 
     android:versionCode="18" android:versionName="3.2.4"> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="18"/> 
<fragment android:name=".ShowUpgradeDialogFragment" 
       android:label="@string/app_name" 
       android:windowIsFloating="true" 
       android:background="@android:color/transparent" 
       android:screenOrientation="portrait"> 
</fragment> 

// remaining manifest 

</manifest> 

мой OnCreate метод:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    DialogFragment newFragment = new ShowUpgradeDialogFragment(); 
    newFragment.show(getFragmentManager(), "dialog"); 

    // code 

    finish() // wrong and was removed, which solved my bug 
    } 

display_update_message.xml:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

<fragment class="com.ila.tax_shield.fragments.ShowUpgradeDialogFragment" 
      android:id="@+id/display_update_message" 
      android:layout_weight="1" 
      android:layout_height="match_parent" 
      android:layout_width="2dp" 
      tools:layout="@layout/display_update_message" /> 

</LinearLayout> 

Это не нравится «андроид: имя =„com.ila.tax_shield.fragments.ShowUpgradeDialogFragment“», и я, не понимая, почему

Заранее спасибо за вашу помощь!

+0

Убедитесь, что вы импортируете из правильного пакета при использовании 'FragmentActivity' (' android.support.v4.app.FragmentActivity') – Emmanuel

+0

Когда я это делаю, ему не нравится его часть поддержки. Но разве он не может работать с помощью DialogFragment? Я немного отредактировал его, чтобы добавить некоторый дополнительный исходный код. – craned

+0

Вы хотите показать «ShowUpgradeDialogFragment», встроенный в макет или как диалог? Кроме того, используйте 'class =" com.ila.tax_shield.fragments.ShowUpgradeDialogFragment "' вместо 'android: name'. – Luksprog

ответ

1

Первое, что вам нужно знать, это AndroidManifest - это не место, где вы объявляете свои фрагменты. Взгляните на docs here на список допустимых элементов в файле Manifest.

Далее, решите, как вы хотите отображать ShowUpgradeDialogFragment. Для DialogFragment у вас есть следующие опции:

  • Внесите его, используя макет xml.
  • Отобразите его, используя FragmentManager.

Теперь, если вы хотите, чтобы вставить его, то просто ваш фрагмент в макете XML,

ИЛИ Сделайте это

DialogFragment newFragment = new ShowUpgradeDialogFragment(); 
newFragment.show(getFragmentManager(), "dialog"); 

Выполнение обоих выше в то же время ДАЕТ НИКАКИХ смысл для меня.

+0

Спасибо за ваш комментарий. Вы ответили на некоторые из моих вопросов, пытаясь выяснить мою проблему. – craned

+0

@DevinCrane Нет проблем! – Varun

+0

@DevinCrane Если это помогает решить вашу проблему, пожалуйста, нажмите «проверить», чтобы отметить вопрос как ответ, так что другие, которые приходят для подобной проблемы, могут оказаться полезными. – Varun

Смежные вопросы