2012-11-21 36 views
0

我試圖從Android 2.1 sdk開始編寫一個Android 2.1/Java應用程序(一片一片地)複製(並略微修改)特定的代碼示例: C:\ Program Files \ Java \ android-2.1_r03-windows \ samples \ android-7 \ ApiDemos \ src \ com \ example \ android \ apis \ view \ RadioGroup1.java如何使應用程序響應特定事件(按鈕)

RadioButtons可以被選中,導致組中的其他單選按鈕被取消選擇。到現在爲止還挺好。但與原始程序不同,點擊Clear('C')不會執行任何操作,並且'selected'TextView不會顯示選定的ID。初始文本'您選擇了:(無)'(修改爲'C: - ')被顯示,並且在點擊其中一個單選按鈕後沒有更新)。

任何人都可以告訴出了什麼問題/在哪裏繼續?

我還在流程中修改/部分複製/添加了幾個.xml文件:AndroidManifest.xml,layout/activity_main.xml,values/drawables.xml,values/ids.xml,values/strings.xml,values/styles.xml,drawable/filled_box.xml(並在可繪製目錄中添加了一些.png文件)。 android-support-v4.jar位於項目的lib目錄中以實現向後兼容性(目標15,最小7)。

這裏的RadioGroup1.java:

package nl.computerhuys.simplescore; 

import nl.computerhuys.simplescore.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.RadioGroup; 
import android.widget.Button; 
import android.widget.RadioButton; 
import android.widget.LinearLayout; 


public class RadioGroup1 extends Activity implements RadioGroup.OnCheckedChangeListener, 
     View.OnClickListener { 

    private TextView mChoice; 
    private RadioGroup mRadioGroup; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     mRadioGroup = (RadioGroup) findViewById(R.id.menu); 

     // test adding a radio button programmatically 
     RadioButton newRadioButton = new RadioButton(this); 
     newRadioButton.setText(R.string.radio_group_s1); 
     newRadioButton.setId(R.id.s1); 
     LinearLayout.LayoutParams layoutParams = new RadioGroup.LayoutParams(
       RadioGroup.LayoutParams.WRAP_CONTENT, 
       RadioGroup.LayoutParams.WRAP_CONTENT); 
     mRadioGroup.addView(newRadioButton, 0, layoutParams); 

     // test listening to checked change events 
     String selection = getString(R.string.radio_group_selection); 
     mRadioGroup.setOnCheckedChangeListener(this); 
     mChoice = (TextView) findViewById(R.id.choice); 
     mChoice.setText(selection + mRadioGroup.getCheckedRadioButtonId()); 

     // test clearing the selection 
     Button clearButton = (Button) findViewById(R.id.clear); 
     clearButton.setOnClickListener(this); 
    } 

    public void onCheckedChanged(RadioGroup group, int checkedId) { 
     String selection = getString(R.string.radio_group_selection); 
     String none = getString(R.string.radio_group_none); 
     mChoice.setText(selection + 
       (checkedId == View.NO_ID ? none : checkedId)); 
    } 

    public void onClick(View v) { 
     mRadioGroup.clearCheck(); 
    } 
} 

這裏的MainActivity.java:

package nl.computerhuys.simplescore; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

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

} 

這裏的activity_main.xml中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android1="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android1:background="@drawable/screen_background_black" 
    tools:context=".MainActivity" > 

    <RadioGroup 
     android:id="@+id/menu" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:checkedButton="@+id/s1" 
     android:orientation="horizontal" > 

     <RadioButton 
      android:id="@+id/s1" 
      android:text="@string/radio_group_1_s1" /> 

     <RadioButton 
      android:id="@+id/s2" 
      android:text="@string/radio_group_1_s2" /> 

     <RadioButton 
      android:id="@+id/s3" 
      android:text="@string/radio_group_1_s3" /> 

     <TextView 
      android:id="@+id/choice" 
      android:text="@string/radio_group_1_selection" /> 

     <Button 
      android1:id="@+id/clear" 
      android1:layout_width="wrap_content" 
      android1:layout_height="wrap_content" 
      android1:text="@string/radio_group_1_clear" /> 

    </RadioGroup> 

</RelativeLayout> 

和AndroidManifest.xml中:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="nl.computerhuys.simplescore" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="7" 
     android:targetSdkVersion="16" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <uses-library android:name="nl.computerhuys.mylibrary" android:required="false" /> 

     <activity 
      android:name="nl.computerhuys.simplescore.MainActivity" 
      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="view.RadioGroup1" android:label="Views/Radio Group" android:exported="false"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.SAMPLE_CODE" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 
0123修改後

logcat的文件(無法找出如何張貼的是,除了通過編輯原帖:(

修改後
09-16 16:18:01.377: D/AndroidRuntime(1476): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 
09-16 16:18:01.377: D/AndroidRuntime(1476): CheckJNI is ON 
09-16 16:18:01.884: D/AndroidRuntime(1476): --- registering native functions --- 
09-16 16:18:02.714: D/ddm-heap(1476): Got feature list request 
09-16 16:18:03.804: D/PackageParser(412): Scanning package: /data/app/vmdl47668.tmp 
09-16 16:18:04.514: I/PackageManager(412): Removing non-system package:nl.computerhuys.simplescore 
09-16 16:18:04.524: D/PackageManager(412): Removing package nl.computerhuys.simplescore 
09-16 16:18:04.534: D/PackageManager(412): Activities: nl.computerhuys.simplescore.MainActivity 
09-16 16:18:04.784: D/PackageManager(412): Scanning package nl.computerhuys.simplescore 
09-16 16:18:04.795: I/PackageManager(412): /data/app/vmdl47668.tmp changed; unpacking 
09-16 16:18:04.826: D/installd(31): DexInv: --- BEGIN '/data/app/vmdl47668.tmp' --- 
09-16 16:18:07.805: D/dalvikvm(1482): DexOpt: load 365ms, verify 1635ms, opt 71ms 
09-16 16:18:08.005: D/installd(31): DexInv: --- END '/data/app/vmdl47668.tmp' (success) --- 
09-16 16:18:08.005: D/PackageManager(412): Activities: nl.computerhuys.simplescore.MainActivity 
09-16 16:18:08.025: D/ActivityManager(412): Uninstalling process nl.computerhuys.simplescore 
09-16 16:18:08.035: D/ActivityManager(412): Force removing process ProcessRecord{44f15ef0 1468:nl.computerhuys.simplescore/10028} (nl.computerhuys.simplescore/10028) 
09-16 16:18:08.055: I/Process(412): Sending signal. PID: 1468 SIG: 9 
09-16 16:18:08.195: I/UsageStats(412): Unexpected resume of com.android.launcher while already resumed in nl.computerhuys.simplescore 
09-16 16:18:08.295: I/WindowManager(412): WIN DEATH: Window{44d60a30 nl.computerhuys.simplescore/nl.computerhuys.simplescore.MainActivity paused=false} 
09-16 16:18:08.435: D/ActivityManager(412): Received spurious death notification for thread [email protected] 
09-16 16:18:08.795: W/InputManagerService(412): Got RemoteException sending setActive(false) notification to pid 1468 uid 10028 
09-16 16:18:09.787: I/installd(31): move /data/dalvik-cache/[email protected]@[email protected] -> /data/dalvik-cache/[email protected]@[email protected] 
09-16 16:18:09.825: D/PackageManager(412): New package installed in /data/app/nl.computerhuys.simplescore.apk 
09-16 16:18:10.075: D/AndroidRuntime(1476): Shutting down VM 
09-16 16:18:10.085: D/dalvikvm(1476): DestroyJavaVM waiting for non-daemon threads to exit 
09-16 16:18:10.104: D/dalvikvm(1476): DestroyJavaVM shutting VM down 
09-16 16:18:10.104: D/dalvikvm(1476): HeapWorker thread shutting down 
09-16 16:18:10.104: D/dalvikvm(1476): HeapWorker thread has shut down 
09-16 16:18:10.104: D/jdwp(1476): JDWP shutting down net... 
09-16 16:18:10.115: I/dalvikvm(1476): Debugger has detached; object registry had 1 entries 
09-16 16:18:10.128: D/dalvikvm(1476): VM cleaning up 
09-16 16:18:10.155: E/AndroidRuntime(1476): ERROR: thread attach failed 
09-16 16:18:10.187: D/ActivityManager(412): Uninstalling process nl.computerhuys.simplescore 
09-16 16:18:10.225: D/dalvikvm(1476): LinearAlloc 0x0 used 623916 of 5242880 (11%) 
09-16 16:18:11.376: D/dalvikvm(412): GC freed 9687 objects/641216 bytes in 666ms 
09-16 16:18:11.414: W/ResourceType(412): Resources don't contain package for resource number 0x7f0700e5 
09-16 16:18:11.425: W/ResourceType(412): Resources don't contain package for resource number 0x7f020031 
09-16 16:18:11.425: W/ResourceType(412): Resources don't contain package for resource number 0x7f020030 
09-16 16:18:11.425: W/ResourceType(412): Resources don't contain package for resource number 0x7f050000 
09-16 16:18:11.725: W/ResourceType(412): Resources don't contain package for resource number 0x7f060000 
09-16 16:18:11.745: W/ResourceType(412): Resources don't contain package for resource number 0x7f060001 
09-16 16:18:12.217: D/dalvikvm(458): GC freed 149 objects/5952 bytes in 756ms 
09-16 16:18:12.276: W/ResourceType(412): Resources don't contain package for resource number 0x7f0700e5 
09-16 16:18:12.276: W/ResourceType(412): Resources don't contain package for resource number 0x7f020031 
09-16 16:18:12.276: W/ResourceType(412): Resources don't contain package for resource number 0x7f020030 
09-16 16:18:12.276: W/ResourceType(412): Resources don't contain package for resource number 0x7f050000 
09-16 16:18:12.475: W/ResourceType(412): Resources don't contain package for resource number 0x7f060000 
09-16 16:18:12.485: W/ResourceType(412): Resources don't contain package for resource number 0x7f060001 
09-16 16:18:12.894: D/AndroidRuntime(1487): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 
09-16 16:18:12.904: D/AndroidRuntime(1487): CheckJNI is ON 
09-16 16:18:14.004: D/AndroidRuntime(1487): --- registering native functions --- 
09-16 16:18:14.924: D/ddm-heap(1487): Got feature list request 
09-16 16:18:15.854: I/ActivityManager(412): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=nl.computerhuys.simplescore/.MainActivity } 
09-16 16:18:15.944: D/AndroidRuntime(1487): Shutting down VM 
09-16 16:18:15.944: D/dalvikvm(1487): DestroyJavaVM waiting for non-daemon threads to exit 
09-16 16:18:15.954: D/dalvikvm(1487): DestroyJavaVM shutting VM down 
09-16 16:18:15.964: D/dalvikvm(1487): HeapWorker thread shutting down 
09-16 16:18:15.964: D/dalvikvm(1487): HeapWorker thread has shut down 
09-16 16:18:15.964: D/jdwp(1487): JDWP shutting down net... 
09-16 16:18:15.964: I/dalvikvm(1487): Debugger has detached; object registry had 1 entries 
09-16 16:18:15.974: D/dalvikvm(1487): VM cleaning up 
09-16 16:18:16.044: E/AndroidRuntime(1487): ERROR: thread attach failed 
09-16 16:18:16.134: D/dalvikvm(1487): LinearAlloc 0x0 used 639500 of 5242880 (12%) 
09-16 16:18:16.644: I/ActivityManager(412): Start proc nl.computerhuys.simplescore for activity nl.computerhuys.simplescore/.MainActivity: pid=1494 uid=10028 gids={} 
09-16 16:18:17.224: D/ddm-heap(1494): Got feature list request 
09-16 16:18:18.604: I/ActivityManager(412): Displayed activity nl.computerhuys.simplescore/.MainActivity: 2599 ms (total 2599 ms) 
09-16 16:18:23.915: D/dalvikvm(458): GC freed 2339 objects/135960 bytes in 262ms 
09-16 16:18:29.025: D/dalvikvm(568): GC freed 43 objects/2016 bytes in 307ms 

MainActivity.java:

修改後
package nl.computerhuys.simplescore; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.TextView; 

import nl.computerhuys.simplescore.R; 


public class MainActivity extends Activity implements RadioGroup.OnCheckedChangeListener, 
View.OnClickListener { 

    private TextView mChoice; 
    private RadioGroup mRadioGroup; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     mRadioGroup = (RadioGroup) findViewById(R.id.menu); 

     // test adding a radio button programmatically 
     RadioButton newRadioButton = new RadioButton(this); 
     newRadioButton.setText(R.string.radio_group_s1); 
     newRadioButton.setId(R.id.s1); 
     LinearLayout.LayoutParams layoutParams = new RadioGroup.LayoutParams(
       RadioGroup.LayoutParams.WRAP_CONTENT, 
       RadioGroup.LayoutParams.WRAP_CONTENT); 
     mRadioGroup.addView(newRadioButton, 0, layoutParams); 

     // test listening to checked change events 
     String selection = getString(R.string.radio_group_selection); 
     mRadioGroup.setOnCheckedChangeListener(this); 
     mChoice = (TextView) findViewById(R.id.choice); 
     mChoice.setText(selection + mRadioGroup.getCheckedRadioButtonId()); 

     // test clearing the selection 
     Button clearButton = (Button) findViewById(R.id.clear); 
     clearButton.setOnClickListener(this); 
    } 

    public void onCheckedChanged(RadioGroup group, int checkedId) { 
     String selection = getString(R.string.radio_group_selection); 
     String none = getString(R.string.radio_group_none); 
     mChoice.setText(selection + 
       (checkedId == View.NO_ID ? none : checkedId)); 
    } 

    public void onClick(View v) { 
     mRadioGroup.clearCheck(); 
    } 

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

} 

清單:修改後

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="nl.computerhuys.simplescore" android:versionCode="1" 
    android:versionName="1.0"> 

    <uses-sdk android:minSdkVersion="7" 
     android:targetSdkVersion="16" /> 

    <application android:allowBackup="true" android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" android:theme="@style/AppTheme"> 

     <activity android:name="nl.computerhuys.simplescore.MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

activity_main.xml中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/screen_background_black" > 

    <RadioGroup 
     android:id="@+id/menu" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <RadioButton 
      android:id="@+id/s1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/radio_group_1_s1" /> 

     <RadioButton 
      android:id="@+id/s2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/radio_group_1_s2" /> 

     <RadioButton 
      android:id="@+id/s3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/radio_group_1_s3" /> 

     <TextView 
      android:id="@+id/choice" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/radio_group_1_selection" /> 
    </RadioGroup> 

    <Button 
     android:id="@+id/clear" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/menu" 
     android:text="@string/radio_group_1_clear" /> 

</RelativeLayout> 
+0

首先嚐試使用logcat,如果您使用的是eclipse:Menu window >> show view >> logcat(不是已棄用的...) – Snicolas

+0

清單中使用的庫有什麼用途? – Snicolas

回答

0

從你的清單中刪除的應用庫。

將不是RadioButton的所有東西移出ButtonGroup。將它們放在組中,並添加xml語句,將它們放入RadioGroup下面的相對佈局(根級)中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/screen_background_black" > 

     <RadioGroup 
     android:id="@+id/menu" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:checkedButton="@+id/s1" 
     android:orientation="horizontal" > 

     <RadioButton 
      android:id="@+id/s1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/radio_group_1_s1" /> 

     <RadioButton 
      android:id="@+id/s2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
       android:text="@string/radio_group_1_s2" /> 

     <RadioButton 
      android:id="@+id/s3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/radio_group_1_s3" /> 
     </RadioGroup> 

     <TextView 
       android:id="@+id/choice" 
       android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/menu" 
       android:text="@string/radio_group_1_selection" /> 

     <Button 
       android:id="@+id/clear" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/choice" 
      android:text="@string/radio_group_1_clear" /> 
</RelativeLayout> 

有你的佈局文件一對夫婦的錯誤:

  • 的android1前綴是無用的,混亂的
  • 無線電組應當只包含單選按鈕
  • 每一個觀點必須有兩個android:layout_width & android:layout_height屬性
  • 工具名稱空間和工具:上下文無用
  • 請配置您的IDE不要使用標籤,但空格。在*中修改縮進比較痛苦。

另外你在yuor manifest中有一個問題:你必須用intent-filter聲明一個活動來捕獲啓動器的意圖。這是您的程序入口點,實際上您聲明瞭兩個...

將兩個活動合併爲一個現在。並且不要以編程方式創建新的小部件,首先使用findViewById獲取在佈局中聲明的小部件。此外,您創建的視圖有一個ID與清單中的一個視圖相沖突。

如果您決定稍後聲明更多活動,請仔細檢查您是否在清單中使用其完全限定名稱,您是否在RadioGroup1活動聲明語句中針對該問題犯了錯誤。

+0

@Sam 我努力遵循這個建議。我將代碼從RadioGroup1類中取出,並將它壓縮到MainActivity類代碼中。我刪除了RadioGroup1活動(這可能不是意味着'將兩個活動合併爲一個')? 不確定我沒有'編程式地創建新的小部件' 請參閱結果修改後的代碼編輯的原始問題(我可以在回覆中只添加約500個字符?) 請看看產生的logCat日誌,顯示一堆錯誤。 您可以評論我做錯了什麼/被誤解嗎? – user1837293

0

您只運行MainActivity而不是RadioGroup1

或者:

  • 通過削減&所有的RadioGroup1一個代碼粘貼到MainActivity刪除不使用的類。
  • ,或使活動,並呼籲在MainAcitivityonCreate()

如果保留兩個活動,你必須調整你的清單startActivity(new Intent(this, RadioGroup1.class));。這是不完全正確:

<activity android:name="view.RadioGroup1" android:label="Views/Radio Group" android:exported="false"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.SAMPLE_CODE" /> 
     </intent-filter> 
    </activity> 

名稱不正確,我相信你只能有一個活動設置爲MAIN

<activity android:name=".RadioGroup1" android:label="Views/Radio Group" android:exported="false" />