2012-12-26 28 views
7

मेरे ऐप को उपयोगकर्ता नाम को ठीक से काम करने के लिए जोड़ा जाना आवश्यक है। मुख्य गतिविधि शीर्ष पर उपयोगकर्ता नाम प्रदर्शित करती है जो इसे डेटाबेस के रूप में पुनर्प्राप्त करती है। मुख्य गतिविधि में एक बटन भी है जो startActivityForResult() विधि के माध्यम से 'addusername' गतिविधि की ओर जाता है; जब उपयोगकर्ता वास्तव में उपयोगकर्ता नाम में प्रवेश करता है तो मुख्य गतिविधि पर केवल उपयोगकर्ता नाम रीफ्रेश और प्रदर्शित हो जाता है। 'addusername' गतिविधि पर एक सबमिट बटन है जो उपयोगकर्ता नाम जोड़ता है और setResult(RESULT_OK);
सब कुछ ठीक काम करता है यदि उपयोगकर्ता नाम 'addusername' बटन पर क्लिक करके दर्ज किया गया है।डायलॉग फ्रैगमेंट के माध्यम से startActivityForResult() का उपयोग कैसे करें?

अब, मैंने मुख्य गतिविधि में एक संवाद जोड़ा है जो तब प्रदर्शित होता है जब ऐप केवल तब शुरू होता है जब डेटाबेस पर कोई उपयोगकर्ता नाम मौजूद न हो। वार्तालाप उपयोगकर्ता नाम जोड़ने का विकल्प देता है, जो क्लिक किए जाने पर, 'addusername' गतिविधि की ओर जाता है। लेकिन 'सबमिट' बटन MainActivity कहा जाता हो जाता है दबाने लेकिन उपयोगकर्ता नाम ताज़ा नहीं है पर (हालांकि, डेटाबेस अपडेट कर दिया है)

यहाँ '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(); 

} 

यहाँ

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

मैं समझता हूँ कि यह हो रहा है क्योंकि संवाद फोन नहीं करता है startActivityForResult() विधि: संवाद के लिए कोड है। लेकिन अगर मैं अपना कोड बदलता हूं, तो भी:

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

यह अभी भी मदद नहीं करता है। शायद क्योंकि, atctivityResult() विधि उसी कक्षा में नहीं है, जिसकी शुरुआत एक्टिविटीफॉर रिसेट() को बुलाया गया है, लेकिन मुझे नहीं पता कि इसके बाद कैसे प्राप्त किया जाए।

संपादित करें 1:

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

कोई उपयोग का उपयोग कर की कोशिश की।

उत्तर

11

आप इस तरह की कोशिश की है:

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

जब आप अपने आशय वस्तु आप के बजाय खुद गतिविधि के संदर्भ का उपयोग करने का BaseContext उपयोग करते हैं, पैदा करते हैं।

+0

बस कोशिश की। अभी भी काम नहीं करता है। –

6

का उपयोग

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

काम किया!

+4

@vchelbanster इस उत्तर के लिए क्रेडिट –

+0

@RandyFreak किया गया है। –

संबंधित मुद्दे