【问题标题】:how to use intent caller on button click properly?如何在按钮点击上正确使用意图调用者?
【发布时间】:2014-08-11 06:01:37
【问题描述】:

实际上,我对某些在一种情况下运行良好但在其他情况下运行不正常的事情感到有些困惑,所以我在这里解释我的问题以识别我所做的错误举动,如果有的话会识别问题请提及。谢谢。

工作正常:

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

    findViewById(R.id.distance_demo_button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, ListViewClass.class);
        intent.putExtra(ListViewClass.EXTRAS_TARGET_ACTIVITY, Distance.class.getName());
        startActivity(intent);
      }
    });

不能正常工作:

scan = (Button) view.findViewById(R.id.scan);
    scan.setOnClickListener(startListener);


    }

 //Create an anonymous implementation of OnClickListener
  private OnClickListener startListener = new OnClickListener() {
   public void onClick(View v) {
       Toast.makeText(view.getContext(),"Scanning", Toast.LENGTH_SHORT).show();



        Intent intent = new Intent(MainActivity.this, ListViewClass.class);


           intent.putExtra(ListViewClass.EXTRAS_TARGET_ACTIVITY, Distance.class.getName());
            startActivity(intent);
       }
}

现在问题出在这一行

Intent intent = new Intent(MainActivity.this, ListViewClass.class);

当我在这种情况下使用这条线时,它会在这条线上显示错误:

Error: 'The constructor Intent(MainActivity, Class<ListViewClass>) is undefined'如果您知道我的问题,请提及。

【问题讨论】:

  • 能否请您展示整个类以查看依赖项是否导致错误?
  • 第二段代码在哪个类?
  • @steve 最好在你的活动类中实现 onclicklistener 而不是在点击监听器上创建许多实例。然后根据查看只使用 switch 案例。

标签: android class android-intent


【解决方案1】:

使用全局上下文变量 glaboaly 并使用它。

Context myContext;
 @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    myContext = MyActivity.this;
}

并使用myContext insted of MainActivity.this。 我不确定它是否解决了问题,只是尝试一下

【讨论】:

  • 类型不匹配:无法从 RoomView 转换为显示此错误的上下文。
【解决方案2】:

当您在 MainActivity 类中调用 Intent intent = new Intent(MainActivity.this, ListViewClass.class); 时。它会正常工作。但是当您不在MainActivity class 的上下文中时。即转到其他班级。会出现这个错误。

如果你想纠正,你可以按照@jithu的方法。否则将上下文存储在 Application 类中。并在任何地方使用它。

【讨论】:

    【解决方案3】:

    在第一种情况下,您将覆盖方法 onClick()。 如果您覆盖该方法,就像您在活动类中声明该函数一样。 这就是你可以调用 MainActivity.this

    的原因

    在第二种情况下,您正在实现抽象方法onClick()。您无法调用 MainActivity.this,因为您的“MainActivity.this”正在引用当前上下文,并且无法从 OnClickListener.class 访问em>。

    【讨论】:

    • 这是指当前类。在这种情况下,它是 onClickListener。 MainActivity.this 指的是整个 MainActivity 类。他的代码是正确的。但他正在使用 Mainactivity 课程之外的意图。这就是问题所在。
    • 是的,你是对的@Ramesh_D,我纠正了我的回答,这有点令人困惑。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多