سؤال

هل يمكن لأحد أن يخبرني بما أفعله خطأ؟ أراهن أنني أفتقد شيئًا صغيرًا. لقد نظرت إلى موقع المطور وقرأت بعض البرامج التعليمية وأنا لا أرى ما ارتكبته خطأ.

أحاول استخدام ListPreference لتحديد الصوت الذي يجب تشغيله على زر نقرة.

لدي هذا في الأعلى:

public String greensound;

هذا هو رمز Onclick الخاص بي:

case R.id.green:
     SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
     greensound  = prefs.getString("greensound", "gsone");
       if (greensound == "gsone") {
        mSoundManager.playSound(1); 
       } else if (greensound == "gstwo") {
        mSoundManager.playSound(2); 
       } else if (greensound == "gsthree") {
        mSoundManager.playSound(3);
       }
 break;

ها هي XML الخاصة بي:

<ListPreference 
android:title="Geen Button" 
android:key="greensound"
android:summary="Select sound for the Green Button" 
android:entries="@array/green_list" 
android:entryValues="@array/green_list_values"
android:defaultValue="gsone">
</ListPreference>

ها هي الإعدادات الخاصة بي. جافا:

package com.my.app;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class Settings extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);


    }


}

وإليك صفيف بلدي إذا كان ذلك سيساعد على الإطلاق:

//This is the one I want to display to the user
    <string-array name="green_list"> 
      <item>Sound One</item>
      <item>Sound Two</item>
      <item>Sound Three</item>
      <item>Sound Four</item>
      <item>Sound Five</item>
    </string-array>


    <string-array name="green_list_values"> 
      <item>gsone</item>
      <item>gstwo</item>
      <item>gsthree</item>
      <item>gsfour</item>
      <item>gsfive</item>
    </string-array>

تحرير: أضيفت logcat أن كيندا بدا من المحتمل أن تكون ذات صلة.

08-27 01:52:07.738: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
08-27 01:52:07.748: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
08-27 01:52:07.758: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}

DDMS> مستكشف الملف> البيانات> البيانات> packagename> مشترك هذا هو ما كان هناك:

com.my.app_preferences.xml:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="redsound">rsone</string>
<string name="greensound">gsone</string>
</map>

_has_set_default_values.xml:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="_has_set_default_values" value="true" />
</map>

كل هذا يربكني أكثر حقًا لأنه ... يبدو أن الجشع لا يؤدي = gsone لذا .... لا أفهم ما هو الخطأ حتى لا ألعب الصوت الافتراضي. ونعم لقد اختبرت

mSoundManager.playSound(1); 
mSoundManager.playSound(2); 
mSoundManager.playSound(3);

كل ذلك بدون رمز آخر ويعملون بشكل رائع. لست متأكدًا ما هو العمل

هل كانت مفيدة؟

المحلول

greensound.equals ("gsone")

نصائح أخرى

واجهت مشكلة مماثلة. لقد غيرت مقارناتي عن "==" إلى String.ContentEnts () وبدأت الأمور في العمل. انتهى بي الأمر في النهاية بوضع المفاتيح والقيم في hashmaps.

المشكلة الوحيدة التي يمكنني التفكير فيها هي أن تفضيلاتك لا يتم تعيينها قبل تشغيل رمز اللعب الخاص بك. لضمان تحميل الإعدادات ، قم بتضمين الكود التالي في OnCreate ():

/* Loading default preferences the first time application is run */
        PreferenceManager.setDefaultValues(getApplicationContext(),
                R.xml.filename, false);

أيضا ، تحقق من خلال DDMS> مستكشف الملف> البيانات> البيانات> Packagename > المشاركين التي يتم تعيين تفضيلاتك.

عندما تستخدم نشاط التفضيل وإنشاءه من مورد XML. يقوم تلقائيًا بإنشاء ملف مشترك: packagename_preferences (على سبيل المثال. com.my_company.my_app_preferences). وبالتالي للوصول إلى هذا ، تحتاج إلى استخدام الرمز التالي:

SharedPreferences prefs = getSharedPreferences("com.my.app_preferences", MODE_PRIVATE);

وأخيراً قم بإزالة السطر التالي في XML:

android:defaultValue="gsone"

أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top