2012-12-26 14 views
7

Moja aplikacja wymaga dodania nazwy użytkownika, aby działała poprawnie. Funkcja mainActivity wyświetla nazwę użytkownika na górze, którą pobiera z bazy danych. Funkcja mainActivity zawiera również przycisk prowadzący do działania "addusername" za pomocą metody startActivityForResult(); kiedy użytkownik faktycznie wprowadzi nazwę użytkownika, tylko nazwa użytkownika w głównej czynności zostanie odświeżona i wyświetlona. Istnieje przycisk przesyłania w czynności "addusername", która dodaje nazwę użytkownika i jest
Wszystko działa poprawnie, jeśli nazwa użytkownika została wprowadzona przez kliknięcie przycisku "addusername".Jak korzystać z funkcji startActivityForResult() za pośrednictwem DialogFragment?

Teraz dodałem dialog w mainActivity, który wyświetla się, gdy aplikacja się uruchamia, tylko jeśli w bazie danych nie ma nazwy użytkownika. Dialog daje możliwość dodania nazwy użytkownika, która po kliknięciu prowadzi do działania "addusername". Ale po naciśnięciu przycisku „submit” główną działalność nie sprawdzony, ale nazwa nie jest odświeżona (mimo, baza danych jest aktualizowane)

Oto kod dla działalności „addusername”:

public void submitusername(View view) { 

    userdatabase name = new userdatabase(this); 
    name.open(); 
    String user = name.getusername(); 
    name.close(); 

    EditText cinone = (EditText) findViewById(R.id.username); 
    username = cinone.getText().toString(); 

    if(user.equals("")) { 

     userdatabase entry = new userdatabase(Editprofile.this); 
     entry.open(); 
     entry.createEntry(username, null, null, null); 
     entry.close(); 

     Context context = getApplicationContext(); 
     CharSequence text = "Added new user!"; 
     int duration = Toast.LENGTH_LONG; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 

    } 

    else { 

     userdatabase update = new userdatabase(Editprofile.this); 
     update.open(); 
     update.updateUsername(username); 
     update.close(); 

     Context context = getApplicationContext(); 
     CharSequence text = "Username updated!"; 
     int duration = Toast.LENGTH_SHORT; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 

    } 

    setResult(RESULT_OK);  
    finish(); 

} 

Tutaj jest to kod dla Dialog:

public class NouserFragment extends DialogFragment { 


@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    // Use the Builder class for convenient dialog construction 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setMessage(R.string.nouseralert) 
      .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

        Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class);  
        startActivity(intent);  

       } 
      }) 
      .setNegativeButton(R.string.ignore, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // User cancelled the dialog 
       } 
      }); 
    // Create the AlertDialog object and return it 
    return builder.create(); 
} 
} 

rozumiem, że to się dzieje, ponieważ Dialog nie wymaga startActivityForResult() metody. Ale nawet jeśli zmienię swój kod, to:

Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class);  
        startActivityForResult(intent, 0); 

To nadal nie pomaga. Prawdopodobnie dlatego, że metoda onActivityResult() nie leży w tej samej klasie, z której wywołano funkcję startActivityForResult(), ale nie wiem, jak ją uzyskać.

EDIT 1: Próbowałem za pomocą

Intent intent = new Intent(getActivity(), Editprofile.class); 
startActivityForResult(intent, 0); 

bezużyteczne.

Odpowiedz

11

Czy chciał w ten sposób:

Intent intent = new Intent(getActivity(), Editprofile.class); 
startActivityForResult(intent, 0); 

Podczas tworzenia zamiarem obiektu użyć BaseContext, zamiast używania odniesienie do samego działania.

+0

Właśnie próbowałem. Nadal nie działa. –

6

Korzystanie

Intent intent = new Intent(getActivity(), Editprofile.class); 
getActivity().startActivityForResult(intent, 0); 

pracował!

+4

@vchelbanster zasługuje na uznanie za tę odpowiedź –

+0

@RandyFreak done. –

Powiązane problemy