2015-08-13 5 views
5

मैं एक गतिविधि के माध्यम से बटन दृश्यता सेट करने के लिए एक समस्या है के साथ एक और acticty में दृष्टिगोचरसेट बटन पसंद की स्थापना

कोड स्पष्टीकरण:

पहले, menu.xml

<Button 
    android:id="@+id/f1" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_marginRight="10dp" 
    android:background="@drawable/button1" 
    android:visibility="visible" /> 

<ImageView 
    android:id="@+id/f2lock" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:src="@drawable/levellocked" 
    android:visibility="visible" /> 

<Button 
    android:id="@+id/f2" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:background="@drawable/button2" 
    android:visibility="gone" /> 

f2 बटन इरादे के लिए इस्तेमाल किया leveltwo.class लेकिन यह अभी भी GONE पर सेट है, f2lock छवि दृश्य देखें levellocked

दूसरा, menu.java

public class menu extends Activity { 

Button f1, f2; 
ImageView f2lock;  

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.famouslevel); 
    f1 =(Button)findViewById(R.id.f1);  

    f1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v){ 
      // TODO Auto-generated method stub 
      Intent level1 = new Intent(); 
      level1.setClassName ("com.example.game", "com.example.game.levelone"); 
      startActivityForResult (level1, 0);    
     }    
    });  
} 

public void onActivityResult (int requestCode, int resultCode, Intent level1){ 
    super.onActivityResult (requestCode, resultCode, level1); 
    f2=(Button)findViewById(R.id.f2);  
    f2lock=(ImageView)findViewById(R.id.f2lock); 

    switch (resultCode) { 
     case 2: f2.setVisibility(View.VISIBLE); 
       f2lock.setVisibility(View.GONE);    
    }  

    f2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v){ 
      // TODO Auto-generated method stub 
      Intent level2 = new Intent(); 
      level2.setClassName ("com.example.game", "com.example.game.leveltwo"); 
      startActivityForResult (level2, 0);    
     }    
    });  
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.splashscreen, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

निम्नलिखित कोड एक परिणाम के साथ levelone.java कॉल करने के लिए

तो levelone.java में मैं इस

public void onClick(View v){ 
        setResult (2); 
        finish();   
        } 
       }); 

कोड समारोह परिणाम भेजने के लिए है की तरह कोड डाल (2) menu.class जब level.class खत्म हो गया है();

public void onActivityResult (int requestCode, int resultCode, Intent level1){ 
    super.onActivityResult (requestCode, resultCode, level1); 
    f2=(Button)findViewById(R.id.f2);  
    f2lock=(ImageView)findViewById(R.id.f2lock); 

    switch (resultCode) { 
     case 2: f2.setVisibility(View.VISIBLE); 
       f2lock.setVisibility(View.GONE);    
    }  

ऊपर कोड levelone.class से (2) परिणाम प्राप्त हो जाएगा और case 2 समारोह करना है

सवाल यह है कि का उपयोग करें और मामले 2 में SharedPreferences स्थापित करने के लिए है? इसलिए f2 और f2lock दृश्यता

बचाया जाएगा, क्योंकि मैं SharedPreferences कोड की कोशिश लेकिन कुछ नहीं है, f2 बटन अभी भी चला गया और f2lock imageView अभी भी दिखाई दे

मेरा मतलब इस तरह है:

एक खेल की तरह जब उपयोगकर्ता किया है स्तर 1 इसलिए स्तर 2

को अनलॉक कर दिया जाएगा, लेकिन यहाँ मैं बटन दिखाई जब स्तर 1 नीचे दिए गए कोड

+0

अरे वहाँ। मैं इस मुद्दे को हल करने में आपकी मदद कर सकता हूं, लेकिन आप थोड़ा पूछ रहे हैं कि आप वास्तव में क्या पूछ रहे हैं। यह शायद मैं एक मूर्ख हंस रहा हूं, लेकिन फिर भी - एक टिप्पणी में समझाते हुए मन, या अपने प्रश्न का एक टीएल कर रहा है, ताकि मैं आपको पर्याप्त प्रतिक्रिया दे सकूं। – Sipty

+0

आपके कोड के बहुत अधिक अमूर्त और कम संदर्भ के साथ, मुझे जोड़ना चाहिए। – Sipty

+0

मेरा मतलब कोड सामान्य गेम ब्रो की तरह है, जब स्तर 1 पूरा स्तर 2 अनलॉक किया गया है – RichFounders

उत्तर

1

उम्मीद है कि मैं आपके सवाल का सही ढंग से समझ लिया है। कृपया, अगर मेरे पास नहीं है तो मुझे सही करो!

पहले एक, एक उचित SharedPreferences कार्यान्वयन होगा, सीधे अपने मौजूदा कोड के शीर्ष पर निर्माण:

तरह से मैं चीजों को देखने के आपके उपयोग मामले पर कई अलग अलग समाधान देखते हैं कि है। मेरी आंखों में, यह सबसे अच्छा तरीका नहीं है, क्योंकि यह साझा किए गए संदर्भों के बिंदु का दुरुपयोग कर रहा है।

ऐसा करने का एक और तरीका विभिन्न गतिविधियों में कॉलबैक लागू करना होगा, लेकिन यह अधिक कठिन हो जाएगा, क्योंकि यह अधिक कठिन हो जाएगा।

इसका मेरा समाधान स्थिर मूल्यों के साथ एक अलग वर्ग होना होगा, जो खिलाड़ी की प्रगति को संग्रहित करेगा।यदि आप सत्रों के बीच प्रगति रहना चाहते हैं, तो यह डिस्क पर लिखने वाली फ़ाइल में भी विकसित किया जा सकता है।

आपको जब भी आवश्यकता हो, आपको केवल getPlayerProgress() जैसे साधारण इंटरफ़ेस फ़ंक्शन के साथ प्लेयर की प्रगति की जांच करनी होगी, जो बदलेगा, उदाहरण के लिए, एक पूर्णांक, जो समझाता है कि अधिकतम स्तर प्राप्त किया गया है। यह भी मानता है कि आप इंटरफेस को एक अलग फ़ंक्शन के साथ संभालते हैं, जिसे प्रत्येक स्तर/गेम की शुरूआत में शुरू किया जाएगा। उस समारोह के लिए नाम updateLevel() होगा, उदाहरण के लिए। क्या यह आपको सही प्रतीत होता है? फिर

/** 
* A static class, which handles all player progress, throughout the lifespan of the app. 
* 
*/ 
static class PlayerProgress { 
    // We set progress to static, so it would be alive, no matter what activity you're in. 
    private static int progress = 1; 

    /** 
    * Update the player's progress. 
    * @param levelNumber: latest level number. 
    */ 
    public static void updateProgress(int levelNumber) { 
     progress = levelNumber; 
    } 

    /** 
    * Get the player's progress. 
    * @return the latest level number. 
    */ 
    public static int getPlayerProgress() { 
     return progress; 
    } 
} 

/** 
* The gui handler would need to be called, every time you need to update the screen to the 
* appropriate level and it's assets. (Buttons, activities ect.) 
* 
* I would implement a MainActivity, which would handle the different screens. 
* 
*/ 
class guiHandler { 
    public void updateLevel() { 
     int progress = PlayerProgress.getPlayerProgress(); 
     /* 
     * Add your 
     */ 
     switch(progress) { 
     case 1: 
      /* 
      * Add the code, which would display level one. 
      * This would include all button visibilities and maybe load level resources ect. 
      */ 
      break; 
     case 2: 
      /* 
      * Same as above. 
      */ 
      break; 

     // You can expand this to as many levels you'd like. 
     } 
    } 
} 

, अगर मैं गलत समझा है, मुझे सही करें:

यहां नमूने के कार्यान्वयन, है दो वर्गों मैंने कहा की। यदि आप नमूना कोड चाहते हैं, तो हर तरह से, बस पूछें।

मुझे आशा है कि आपका प्यारा दिन होगा।

+0

हम्म तो यह getPlayerProgress() गेम में सहेजे गए अंतिम डेटा को लोड करने जैसा है? – RichFounders

+0

यह उस जानकारी तक पहुंच जाएगा, जिसे आप साझा वरीयताओं से सहेजने की कोशिश कर रहे थे, इस मामले में: खिलाड़ी प्रगति करते हैं। मैं उल्लेख करना भूल गया, कि मैं एक इंटरफ़ेस हैंडलर फ़ंक्शन का उपयोग कर रहा हूं। मुझे इसे आपके लिए संपादित करने की अनुमति दें। – Sipty

+0

मैंने इसे संपादित किया है, कृपया एक नज़र डालें। – Sipty

1

लिखें किया जाता है सुनिश्चित करें:

Intent intent = new Intent(); 
intent.putExtra("key", 2); 
setResult(RESULT_OK, intent); 
finish(); 

और गतिविधि परिणाम की जांच:

public void onActivityResult (int requestCode, int resultCode, Intent level1) { 
    super.onActivityResult(requestCode, resultCode, level1); 
    if (requestCode == 0 && resultCode == RESULT_OK) { 
     if(level1.getExtras() != null){ 
      int key = level1.getIntExtra("key",0); 
      if(key == 2){ 
       f2.setVisibility(View.VISIBLE); 
      f2lock.setVisibility(View.GONE); 
      } 
     } 
    } 
} 
+0

ठीक भाई मैं – RichFounders

+0

कोशिश करूंगा लेकिन मैं वहां वरीयताओं को कैसे रखूं? तो बटन दृश्यता बचाई गई है? – RichFounders

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