2012-11-21 42 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" />