2013-07-14 8 views
0

Планирование создания приложения с заставкой зависит от предпочтений пользователя (конечная цель, по-прежнему не добавляет onclick listener к кнопкам), я начинаю шаг за шагом, чтобы достичь этого, и в первый раз использовать радио кнопки,Пользовательские предпочтения с кнопкой «Радио» Проблема

Когда я запустил приложение и нажал кнопку предпочтения в меню параметров, он дал силу закрыть, как показано ниже.

Я знаю, что это можно сделать с помощью listpreference в preference.xml в xml-папке, но id нравится делать это в макете, если это возможно.

любая помощь будет признателен, спасибо

Splash.java

public class Splash extends Activity { 
MediaPlayer ourSong; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 

    ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);   
     ourSong.start();    
     Thread timer = new Thread(){ 
      public void run(){ 
       try{ 
        sleep(2000); 
        } 
        catch (InterruptedException e){ 
        e.printStackTrace(); 
        } 
        finally{ 
         Intent intent = new Intent(Splash.this, MainActivity.class);          
         startActivity(intent); 
         } 
       } 
      };                   
      timer.start(); 
      }  
    @Override 
    protected void onPause() { 
       // TODO Auto-generated method stub 
     super.onPause(); 
     ourSong.release(); 
     finish(); 
       } 
      } 

MainActivity.java

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 
@Override 
public boolean onCreateOptionsMenu(android.view.Menu menu) { 

MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.cool_menu, menu); 

getLayoutInflater().setFactory(new Factory() { 
public View onCreateView(String name, Context context,AttributeSet attrs) { 

if (name .equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) { 
try { 
LayoutInflater li = LayoutInflater.from(context); 
final View view = li.createView(name, null, attrs); 

new Handler().post(new Runnable() { 
public void run() { 

((TextView) view).setTextSize(25); 
((TextView) view).setTextColor(Color.RED); 
} 
} 
);           
return view; 
} 
catch (InflateException e) {   
} 
    catch (ClassNotFoundException e) {   
    } 
}         
return null; 
} 
} 
);   
return super.onCreateOptionsMenu(menu);          
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
    switch (item.getItemId()) { 
    case R.id.aboutUs: 
     Intent i = new Intent("com.example.custompreference.ABOUT"); 
     startActivity(i); 
    break; 
    case R.id.preferences: 
     Intent p = new Intent("com.example.custompreference.PREFS"); 
     startActivity(p); 
    break; 
    case R.id.exit: 
     finish(); 
    break; 
} 
return false; 
} 
} 

Prefs.java

public class Prefs extends PreferenceActivity{  
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pref); 
    } 
    } 

pref.xml

<?xml version="1.0" encoding="utf-8"?> 
    <RadioGroup xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:gravity="center">  

<RadioButton android:id="@+id/radio_first" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="First" 
    android:textColor="#B22222" 
    android:onClick="onRadioButtonClicked"/> 

<RadioButton android:id="@+id/radio_second" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Second" 
    android:onClick="onRadioButtonClicked"/> 
</RadioGroup> 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.custompreference" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.custompreference.Splash" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" >   
     <intent-filter> 
      <action android:name="com.example.custompreference.MAINACTIVITY" />     
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".AboutUs" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="com.example.custompreference.ABOUT" />     
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".Prefs" 
     android:label="@string/app_name" >   
     <intent-filter> 
      <action android:name="com.example.custompreference.PREFS" />    
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    </application> 
    </manifest> 

LogCat:

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.example.custompreference/com.example.custompreference.Prefs}: 
java.lang.RuntimeException: Your content must have a ListView whose id attribute is 
    'android.R.id.list' 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3687) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.RuntimeException: Your content must have a ListView whose id 
    attribute is 'android.R.id.list' 
at android.app.ListActivity.onContentChanged(ListActivity.java:243)  
    atandroid.preference.PreferenceActivity.onContentChanged(PreferenceActivity.java:165)  
at om.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:219) 
at android.app.Activity.setContentView(Activity.java:1660) 
at com.example.custompreference.Prefs.onCreate(Prefs.java:11) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 

ответ

0

Если вы просматриваете логарифм, вы можете увидеть, что вам нужен ListView.

Но вы все исправите. В основном вы должны создать файл Preferences.xml, в котором вы указываете, какие виджеты предпочтений вы хотите использовать в своей PreferenceActivity, например. Радиокнопки, а затем назначить этот файл XML в вашем PreferenceActivity так:

addPreferencesFromResource(R.xml.preferences); 

Пример preferences.xml из this tutorial (файл идет в разрешении/папку XML, которые вы должны создать сами)

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
<PreferenceCategory 
    android:summary="Username and password information" 
    android:title="Login information" > 
    <EditTextPreference 
    android:key="username" 
    android:summary="Please enter your login username" 
    android:title="Username" /> 
    <EditTextPreference 
    android:key="password" 
    android:summary="Enter your password" 
    android:title="Password" /> 
</PreferenceCategory> 

<PreferenceCategory 
    android:summary="Username and password information" 
    android:title="Settings" > 
    <CheckBoxPreference 
    android:key="checkBox" 
    android:summary="On/Off" 
    android:title="Keep me logged in" /> 

    <ListPreference 
    android:entries="@array/listOptions" 
    android:entryValues="@array/listValues" 
    android:key="listpref" 
    android:summary="List preference example" 
    android:title="List preference" /> 
</PreferenceCategory> 
</PreferenceScreen> 

Так посмотрите here

Edit:

Вы можете добавить пользовательскую запись в ListView в preferences.xml вроде этого:

<Preference 
     android:layout="@layout/your_custom_pref_entry" 
     android:key="SOME_KEY_NAME" /> 

Не знаете, как обращаться с выбором RadioButtons оттуда.

+0

Я знаю, что для создания preference.xml в папке xml и предпочтение этого списка даст радиообмена, но я хочу сделать это с помощью макета и смогу его настроить, возможно ли это, мой дорогой .thanks –

+0

Редактированный ответ. – Jakob

Смежные вопросы