2010-07-01 10 views
6

मुझे ActivityGroup का उपयोग कर एक समस्या है। मेरे पास ActivityGroup के अंदर दो गतिविधियां हैं और उनमें से दोनों एक मेनू का उपयोग करते हैं (ऑनक्रेटऑप्शनमेनू और ऑनऑप्शन इटैम सेलेक्टेड ओवरराइडिंग)।एंड्रॉइड गतिविधि समूह मेनू समस्या

ठीक है, समस्या यह है कि समूह में दूसरी गतिविधि मेन्यू कुंजी दबाते समय मेनू नहीं दिखाती है। पहली गतिविधि मेनू को दिखाकर ठीक काम करती है।

इस मुद्दे के बारे में कोई विचार?

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    boolean result = super.onCreateOptionsMenu(menu); 
    menu.add(0, MENU_REFRESH, 0, R.string.menu_refresh).setIcon(R.drawable.ic_menu_refresh); 
    return result; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case MENU_REFRESH: 
     Log.d(TAG,"REFRESH"); 
     refresh(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

मुझे लगता है कि इस दूसरे का अद्भुत व्यवहार है गतिविधि। वर्तमान में दूसरी गतिविधि पर किसी भी नियंत्रण का चयन करने का प्रयास करें और फिर मेनू बटन दबाएं। मेनू दिखाई देगा, लेकिन मुझे नहीं पता क्यों। –

+0

मुझे एक ही समस्या है मुझे दूसरी गतिविधि के लिए एक ही मेनू मिल रहा है। यहां तक ​​कि मेरे पास दूसरी गतिविधि के लिए एक अलग मेनू परिभाषित है। कृपया मुझे बताएं कि इस समस्या को कैसे ठीक किया जाए – Sam

उत्तर

1

चेक this धागा:

मैं बच्चे गतिविधि में इस कोड है।

मेनू के माता-पिता aactivity में संभाला जा सकता है लेकिन बनाया बच्चे गतिविधि

+0

ठीक है, लेकिन अगर मैं मूल गतिविधि में मेनू को संभालता हूं तो मैं बाल गतिविधि की विधि कैसे लगा सकता हूं? – xger86x

+0

@ xger86x: यह मुद्दा है। आपको उस बच्चे की गतिविधि में मेनू को संभालना चाहिए जो माता-पिता में नहीं है। – Macarse

+0

@macarse ठीक है .... मैं यह कैसे करूँ? क्या आप मेरा सवाल समझते हैं? अगर मुझे बाल गतिविधि पर एक विधि का आह्वान करना है तो मैं माता-पिता से नहीं कर सकता .. – xger86x

7

से निपटने का एक और अच्छा तरीका यह ActivityGroup के LocalActivityManager का उपयोग करना है में। स्थानीय गतिविधि प्रबंधक जाओ वर्तमान गतिविधि मिलता है, और है कि गतिविधि के उचित विधि करते हैं:

public boolean onPrepareOptionsMenu(Menu menu) { 
    //super.onPrepareOptionsMenu(menu); 
    return getLocalActivityManager().getCurrentActivity() 
     .onCreateOptionsMenu(menu); 
} 

public boolean onCreateOptionsMenu(Menu menu) { 
    //super.onCreateOptionsMenu(menu); 
    return getLocalActivityManager().getCurrentActivity() 
     .onCreateOptionsMenu(menu); 
} 

public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    //super.onMenuItemSelected(featureId, item); 
    return getLocalActivityManager().getCurrentActivity() 
     .onMenuItemSelected(featureId, item); 
} 

नोट: इस रणनीति का उपयोग, तुम क्या कर गतिविधि- बच्चे से super.onCreateOptionsMenu फोन नहीं चाहिए, ताकि एक ढेर अतिप्रवाह अपवाद का कारण बनता है । मुझे यकीन नहीं है कि superclass के * विधियों को कॉल करने का उद्देश्य क्या है, क्योंकि मैंने उन्हें छोड़ा है और कोई नकारात्मक परिणाम नहीं देखा है। (... अभी तक)

1

फिर भी एक और तरीका गतिविधि समूह समूह में मेनू बनाने के लिए है और फिर मेन्यू आइटम्स को साफ़ और पुनः जोड़ने के लिए सार्वजनिक बूलियन ऑनपेरेरऑप्शनमेनू (मेनू मेनू) का उपयोग करें।

ActivityGroup वर्ग में:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    //what is the current activity? 
    menu.add(0, 0, 0, "holder"); 
    return true; 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    //start a new 
    menu.clear(); 
    //add some menu options 
    .getLocalActivityManager().getCurrentActivity().onPrepareOptionsMenu(menu); 
    return super.onPrepareOptionsMenu(menu); 
} 

गतिविधि में:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) 
{ //add menus or inflate here 
    return true; 
} 
2

आप गतिविधि समूह में मेनू के तरीकों को ओवरराइड, और इसी के तरीकों कॉल करने की आवश्यकता बाल गतिविधि पर। इस लेख देखें: How to Create Options Menu on Child Activity inside an ActivityGroup

public class TestGroup extends ActivityGroup { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //start child activity 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     return getLocalActivityManager().getCurrentActivity().onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 
     return getLocalActivityManager().getCurrentActivity().onMenuItemSelected(featureId, item); 
    } 
} 
2

उपयोग tabGroupActivity

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // TODO Auto-generated method stub 


    return getLocalActivityManager().getCurrentActivity().onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    // TODO Auto-generated method stub 
    return getLocalActivityManager().getCurrentActivity().onMenuItemSelected(featureId, item); 
} 

कोड है जो दोनों 2 बच्चे क्रियाएँ में नीचे दिए गए का उपयोग पर इस कोड

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.menu_1, menu); 
    return true; 
}// menu_1 is the xml file in menu folder 
@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 

    switch (item.getItemId()) { 
    case R.id.weekly: 
     Intent weekly = new Intent(getParent(),Activity1.class); 
     TabGroupActivity parentActivity = (TabGroupActivity)getParent(); 
     parentActivity.startChildActivity("weeklyview", weekly); 

     break; 

    case R.id.daily : 
     Intent daily = new Intent(getParent(),Activity2.class); 
     TabGroupActivity parentActivity2 = (TabGroupActivity)getParent(); 
     parentActivity2.startChildActivity("daily", daily); 
     break; 

    default: 
     break; 
    } 

    //use return true 
return true; 
} 
संबंधित मुद्दे