创建按钮侦听器时出错

时间:2014-05-19 18:24:12

标签: android button listener actionlistener

我的目的是从EditText获取文本并在Toast消息中查看它。代码是这样的:

package com.example.primaapplicazione;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.os.Build;

public class MainActivity extends Activity
{

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

    if (savedInstanceState == null) 
    {
        getFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }
}

public void fromEditToToast()
{
    EditText e = (EditText)findViewById(R.id.editText1);
    Button b = (Button)findViewById(R.id.button1);


    b.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v)
        {   
        }
    });
}

@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;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) 
    {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment 
{
    public PlaceholderFragment() 
    {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
    {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        return rootView;
    }

}

}

如果我调用方法" fromEditToToast()"在没有" setOnClickListener()"的onCreate()中,它正确编译并打开应用程序。如果我在模拟器应用程序上使用该函数调用相同的方法,则不会打开,显示此消息"不幸的是,PrimaApplicazione已停止。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

我看到这是一个非常常见的错误,PlaceholderFragment使用必须包含元素fragment_main.xmleditText1的{​​{1}},可能您已经定义了这些元素你的button1

答案 1 :(得分:0)

可能是在活动开始时未实例化视图。设备比模拟器工作得更快,因此它可能在设备中工作而不在模拟器中。

直接在片段中实现你的onClickListener并从那里显示toast,它会起作用(假设EditText和Button位于片段)。

在片段中尝试以下代码,并在片段的onViewCreated函数中调用以下函数来设置按钮的监听器: -

private void set buttonOnClickListener()
{
    EditText e = (EditText)getView().findViewById(R.id.editText1);
    Button b = (Button)getView().findViewById(R.id.button1);

   b.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v)
        {   
              //your code goes here;
        }
    });
}