【问题标题】:Starting intent from onclicklistener从 onclicklistener 开始意图
【发布时间】:2018-03-27 09:49:37
【问题描述】:

我正在尝试从自定义 onclick 侦听器启动新活动。但它无法从 onclick 监听器访问 MainActivity 实例。此外,它显示错误的意图构造函数。这是我的代码:

public class ChartClickListener implements OnClickListener {
    private String ChartLink;
    public ChartClickListener(String chartLink){
        this.ChartLink=chartLink;
    }
    @Override
    public void onClick(View view) {
        // TODO Auto-generated method stub
        Intent intent=new Intent(MainActivity.this,ChartImageActivity.class);
        intent.putExtra("chartLink", ChartLink);
        startActivity(intent);
    }
}

提前感谢您的帮助。

【问题讨论】:

  • intent构造函数的第一个参数,是一个上下文对象
  • 将上下文传递给构造函数并使用它来启动活动
  • 发布您的 logcat 信息

标签: android android-intent onclicklistener


【解决方案1】:

修改你的代码为:

@Override
    public void onClick(View view) {
        // TODO Auto-generated method stub
        Intent intent=new Intent(view.getContext(),ChartImageActivity.class);
        intent.putExtra("chartLink", ChartLink);
        startActivity(intent);
    }

【讨论】:

    【解决方案2】:

    这样试试

    @Override
        public void onClick(View view) {
            // TODO Auto-generated method stub
            Intent intent=new Intent(view.getContext(),ChartImageActivity.class);
            intent.putExtra("chartLink", ChartLink);
            view.getContext().startActivity(intent);//Changed Here
        }
    

    希望它会起作用

    【讨论】:

    • 这不起作用,因为 MainActivity.this 不在 onclick 侦听器类的范围内
    • 谢谢!这对我有用,而不是标记为正确的答案。
    【解决方案3】:

    将活动上下文传递给自定义 onclick 侦听器并使用该上下文启动活动

     public class ChartClickListener implements OnClickListener {
        private String ChartLink;
        Context c;
        public ChartClickListener(String chartLink,Context context){
            this.ChartLink=chartLink;
            this.c=context;
        }
        @Override
        public void onClick(View view) {
            // TODO Auto-generated method stub
            Intent intent=new Intent(c,ChartImageActivity.class);
            intent.putExtra("chartLink", ChartLink);
            c.startActivity(intent);
        }
    
    }
    

    设置 setOnClickListener 为

    ChartClickListener chartclicklistener=new ChartClickListener("chartLink",MainActivity.this);
    b.setOnClickListener(chartclicklistener);
    

    【讨论】:

      【解决方案4】:

      MainActivity.this 替换为view.getContext() 即可。

      【讨论】:

        【解决方案5】:

        我尝试了这个,它成功了,我想展示一个 Toast,然后转移到一个新的 Activity。

        public class NumbersClickListener implements View.OnClickListener {
        
        @Override
        public void onClick(View view){
            Toast.makeText(view.getContext(),"Open the list of Numbers",Toast.LENGTH_SHORT).show();
            switch (view.getId()){
                case R.id.numbers:
                    Intent i  = new Intent(view.getContext(), NumberActivity.class);
                    view.getContext().startActivity(i);
                    break;
                case R.id.family:
                    Intent   i2  = new Intent(view.getContext(),FamilyActivity.class);
                    view.getContext().startActivity(i2);
                    break;
                case R.id.colors:
                    Intent  i3  = new Intent(view.getContext(),ColorsActivity.class);
                    view.getContext().startActivity(i3);
                    break;
                case R.id.phrases:
                    Intent  i4  = new Intent(view.getContext(),PhrasesActivity.class);
                    view.getContext().startActivity(i4);
                    break;
        
            }
        
        }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-06
          相关资源
          最近更新 更多