显示另一活动单击菜单项后(Displaying another Activity after cli

2019-09-22 20:39发布

我写我的第一个Android应用程序。 我有三个活动:BaseballCardList,BaseballCardDetails和FilterBaseballCards。 BaseballCardList负荷为主要活动。 它有两个选项的菜单中显示的另外两个活动之一。 BaseballCardDetails负载就好了。 但是,当我尝试加载FilterBaseballCards,我得到一个“不幸的是,BBCT为Android已经停止。” 错误信息。 我运行在Android模拟器我的应用程序。 以下是初步认识的代码:

RES /布局/ card_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/card_list"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
/>

RES /布局/ filter_cards.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"
>
    <TextView android:text="@string/filter_by_label" />
    <RadioGroup android:id="@+id/filter_by">
        <RadioButton android:id="@+id/year"
                     android:text="@string/year_radio_button"
        />
        <RadioButton android:id="@+id/number"
                     android:text="@string/number_radio_button"
        />
        <RadioButton android:id="@+id/year_and_number"
                     android:text="@string/year_and_number_radio_button"
        />
        <RadioButton android:id="@+id/player_name"
                     android:text="@string/player_name_radio_button"
        />
    </RadioGroup>
    <Button android:id="@+id/ok"
            android:text="@string/ok_button"
    />
    <Button android:id="@+id/cancel"
            android:text="@string/cancel_button"
    />
</LinearLayout>

BaseballCardList.java:

package bbct.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class BaseballCardList extends Activity {

    private static final String DEBUG_TAG = "BaseballCardList";

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        new MenuInflater(this).inflate(R.menu.option, menu);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.add:
                Log.d(DEBUG_TAG, "Starting BaseballCardDetails");

                this.startActivity(new Intent(this, BaseballCardDetails.class));
                return true;

            case R.id.filter:
                Log.d(DEBUG_TAG, "Starting FilterBaseballCards");

                this.startActivity(new Intent(this, FilterBaseballCards.class));
                return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

FilterBaseballCards.java:

package bbct.android;

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

public class FilterBaseballCards extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.filter_cards);
    }
}

AndroidManifest.xml中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="bbct.android"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name=".BaseballCardList"
                  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=".BaseballCardDetails" />
        <activity android:name=".FilterBaseballCards" />
    </application>
</manifest>

BaseballCardDetails.java几乎是相同的FilterBaseballCards.java,所以我不会发布它。

为什么我会收到此错误消息? 更重要的是,我怎么去跟踪自己的问题? 我使用Android的命令行工具,不蚀。 我开始加入一些日志消息,但我不知道如何查看日志输出,可以帮助我追查问题的根源。

更新:

我改变了setContentView()在FilterBaseballCards到setContentView(R.layout.card_details);card_details查看加载就好了。 这缩小了问题我filter_cards.xml文件。

另一个更新:

我简化filter_cards.xml到:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"
>
    <TextView android:text="@string/filter_by_label" />
</LinearLayout>

并继续得到同样的错误如前。

Answer 1:

采用

adb logcat 

以查看从命令提示记录

也许你还没有添加条目清单文件为新的活动,为更多的从这里再看看开始一个活动:

http://developer.android.com/training/basics/firstapp/starting-activity.html



Answer 2:

好吧,我想你的观点是正确的居多。 除了我不喜欢这一行

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content" //Here wrap_content? Shouldn't it be fill_parent?
              android:orientation="vertical"               
>

除此之外,你的资源可能会被搞砸了(没有访问权的人/名称是错误的)@字符串/名称或@ + ID /名称

编辑:

我也注意到你没有一个ID分配给TextView可能应该这样做;)



Answer 3:

听起来像是你忘了添加你开始清单的活动比较。

更多关于意图过滤: http://developer.android.com/guide/components/intents-filters.html



Answer 4:

作为@Nate指出,和我核实,问题是在我的FilterBaseballCards活动的看法。 特别是,我修改了filter_cards.xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical"
>
    <TextView     
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/filter_by_label" 
    />
</LinearLayout>

请注意,我说android:layout_widthandroid:layout_height属性为TextView标签。 这样做后,应用程序编译,并在Android模拟器运行正常。



文章来源: Displaying another Activity after clicking a menu item