【问题标题】:Why does the activity not change on button click?为什么单击按钮时活动不改变?
【发布时间】:2012-04-30 20:33:47
【问题描述】:

当您尝试通过单击按钮来更改活动时,我发现您必须使用 Intent。但是在我的代码中使用它似乎不起作用。我的代码有问题吗?

  public class SearchActivity extends Activity implements OnClickListener{

    private ListView recipes;
    Intent intent;
    Button button;
    EditText input;

    public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);

          setContentView(R.layout.searchlist);

          //EditText input = (EditText)findViewById(R.id.recipeName);
          button = (Button)findViewById(R.id.submit);
          input = (EditText)findViewById(R.id.recipeName);

          //recipes = (ListView)findViewById(R.id.recipes);
          //recipes.setAdapter(new ArrayAdapter<String> (this, R.layout.main, getResources().getStringArray(R.array.BaconSandwich)));
          button.setOnClickListener(this);
      }

      public void onClick(View clicked) {

          String value = input.getText().toString();
          Toast.makeText(this, value, Toast.LENGTH_SHORT).show();

          if(clicked == button) {
            recipes = (ListView)findViewById(R.id.recipes);
            Toast.makeText(this, "It is working for this item.", Toast.LENGTH_SHORT).show();
            Intent i = new Intent(SearchActivity.this, RecipeMethodActivity.class);
            SearchActivity.this.startActivity(i);
          }
      }

我不确定这是否只是一个简单的命名错误,或者我调用它的方式是错误的。任何帮助都会很棒。

此外,我已将我想要更改为 (RecipeMethodActivity) 的活动添加到 Android 清单中。

【问题讨论】:

  • 当你点击按钮时你看到你的 Toast 了吗?
  • “不起作用”到底是什么意思?阅读:LogCat 中有什么? (在 Eclipse 中:窗口 -> 显示视图 -> Android -> LogCat)
  • 不,我实际上只看到了第一个 toast,现在将尝试删除 if 语句。唯一的问题是我最终希望应用程序根据添加到文本框中的值来发送数据。
  • 要使用 Intent 发送数据,请查看各种 putExtra() 方法。如果您需要进一步的帮助,请在 Intent 工作后为此打开一个新问题 :) developer.android.com/reference/android/content/…
  • 不幸的是,通过删除 if 语句它仍然不会改变活动,而且我收到的 toast 消息与设置的内容不匹配,而是一条被删除的消息。

标签: android android-intent onclick android-activity android-button


【解决方案1】:

您需要在 onClick 方法中检查视图的 ID,如下所示:

public void onClick(View clicked) {

      String value = input.getText().toString();
      Toast.makeText(this, value, Toast.LENGTH_SHORT).show();

      if(clicked.getId() == R.id.submit) {
        recipes = (ListView)findViewById(R.id.recipes);
        Toast.makeText(this, "It is working for this item.", Toast.LENGTH_SHORT).show();
        Intent i = new Intent(SearchActivity.this, RecipeMethodActivity.class);
        SearchActivity.this.startActivity(i);
      }
  }

【讨论】:

  • 我已经进行了必要的更改,我首先删除了 intent 和 start 活动,并且 toast 运行良好,生成了适当的文本。但是当我改变并想要改变活动时,应用程序崩溃了。关于它可能来自什么的任何想法?我在正确的庄园中调用开始活动吗?
  • 当它崩溃时,只需编辑问题并发布您将在 LogCat 中找到的错误。
  • 对不起,我根本不懂 Log Cat,但据我所知,问题是 onCreate(RecipeMethodActivity)。这个活动什么都不做,应该是空白的。
【解决方案2】:

在您的onClick 方法中,您正在比较两个View 对象的实例是否相同。显然,传递给onClick 方法的View 对象不是== 传递给私有实例变量Button button

您需要比较他们的 ID:

if (view.getId() == R.id.button)

【讨论】:

  • 大卫更快,但这个答案提供了背景。
【解决方案3】:

我从未尝试使用clicked == button 测试视图,但这应该可以在您的 onCreate() 中使用:

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        Toast.makeText(this, "It is working for this item.", Toast.LENGTH_SHORT).show();
        Intent i = new Intent(SearchActivity.this, RecipeMethodActivity.class);
        SearchActivity.this.startActivity(i);
    }
});

【讨论】:

    【解决方案4】:
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Toast.makeText(this, "It is working for this item.",Toast.LENGTH_SHORT).show();
            Intent i = new Intent(view.getContext(), RecipeMethodActivity.class);
            i.putExtra("extra", extra);
            //use this ^ to transfer data from one activity to another
            startActivity(i);
            }});
    

    【讨论】:

    • 通过这样的方法,您不必实现onClickListener。不同之处在于,在这种方法中,您为每个可点击元素实例化新的侦听器,但如果您实现onClickListener,则不需要为每个可点击元素实例化。
    猜你喜欢
    • 2015-04-21
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多