更改意图时应用程序崩溃

时间:2014-01-02 20:44:34

标签: java android debugging

我是Android新手,问题很简单,但我不能放置它。我试着查看logcat,但我无法跟进。

这是主要活动加载得很好。

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity  {

Intent intent;
Button newsButton; 
@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.main, menu);
    return true;
}    

public void sendMessage(View view) {
    Intent intent = new Intent(this, NewsActivity.class);
    startActivity(intent);
}

}  

这是相应的xml:     

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:orientation="vertical" >

    <Button
        android:id="@+id/newsButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="104dp"
        android:onClick="@layout/news_activity"
        android:text="News" />

    <Button
        android:id="@+id/contactButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Contact Us"
        android:onClick="@layout/contact_activity" />

    <Button
        android:id="@+id/findUs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Social Media"
        android:onClick="@layout/social_activity" />

    <Button
        android:id="@+id/fundButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Fundraising" />
</LinearLayout>

<TextView
    android:id="@+id/titleName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="24dp"
    android:text="Send the Scots to Scotland"
    android:textSize="24sp" />

</RelativeLayout>

崩溃发生在我调试的API 14设备上。点击我的任何一个按钮后,切换到如下所示的新活动:(这些活动基本上与下面的活动相同)

package com.gconcode.scotstoscotland;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;

public class NewsActivity extends Activity {

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


}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        // This ID represents the Home or Up button. In the case of this
        // activity, the Up button is shown. Use NavUtils to allow users
        // to navigate up one level in the application structure. For
        // more details, see the Navigation pattern on Android Design:
        //
        // http://developer.android.com/design/patterns/navigation.html#up-  vs-back
        //
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

抱歉,我删除了logcat,我不确定我是否正确发布了。由于帮助,我也不想让帖子变得不方便!

1 个答案:

答案 0 :(得分:1)

我认为你误解了android:onClick。当您单击layout时,您似乎希望它加载某个Button文件,但这不是它的工作原理。您提供的名称android:onClick应该是一个函数的名称,该函数不返回任何内容并接受View作为其唯一参数。看起来你从

文档中的示例中提取了它
public void sendMessage(View view) {
    Intent intent = new Intent(this, NewsActivity.class);
    startActivity(intent);
}

有不同的方法可以做到这一点。由于您已经拥有android:onClick并且Activity中有方法,因此可以将其更改为

android:onClick="sendMessage"

然后在该方法中添加switch语句以打开正确的Activity。像

这样的东西
public void sendMessage(View view) 
{
    switch (view.getId())   // get the id of the View clicked
    {
         case (R.id.newsButton):
            Intent intent = new Intent(this, NewsActivity.class);
            startActivity(intent);
            break;
        case (R.id.contactButton):
            // assuming ContactActivity.java is an Activity name
            Intent intent = new Intent(view.getContext(), ContactActivity.class);
            startActivity(intent);
            break;
       ...
    }
}

This answer显示了执行Intent的一种不同方式,因此您可以减少一些可重用的代码。如果它看起来太复杂,那么在你有更好的理解但只是一个想法之前不要担心它。