【问题标题】:starting new activity on click of buttons in a gridview单击gridview中的按钮开始新活动
【发布时间】:2012-06-25 07:15:00
【问题描述】:

我有一个gridview,我正在为它设置一个按钮适配器。它有 2 个按钮,我想为这些按钮设置 Onclick 侦听器。

 GridView gridview = (GridView) findViewById(R.id.gridView_table_select);
 gridview.setAdapter(new ButtonAdapter(this));

在我的 Gridview 的 getView() 方法中,我将按钮添加为网格项。我还在为按钮设置 onClick 监听器。

 public View getView(int position,
                           final View convertView, ViewGroup parent) {
  Button btn;

  if (convertView == null) {
   // if it's not recycled, initialize some attributes
   btn = new Button(mContext);
   btn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Context context = v.getContext();
            Intent intent = new Intent(context , Main.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    });
   btn.setLayoutParams(new GridView.LayoutParams(350, 65));
   btn.setPadding(8, 8, 8, 8);
   btn.setWidth(LayoutParams.WRAP_CONTENT);

如您所见,我正在为按钮设置 onClick,并尝试启动一个新活动,但是当我单击这些按钮时,什么也没有发生。 我应该更正什么?

【问题讨论】:

  • 上下文上下文 = v.getContext();而是使用你已经拥有的 mContext

标签: android android-layout android-intent android-activity android-gridview


【解决方案1】:

Context context = v.getContext(); 改用 mContext 你已经有了

    if (convertView == null) {
           // if it's not recycled, initialize some attributes
           btn = new Button(mContext);
           btn.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    Intent intent = new Intent(mContext, //<-------------
Main.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(intent);
                }
            });

【讨论】:

    【解决方案2】:

    让你的 Activity 类实现AdapterView.OnItemClickListener

    在 oncreate() 调用中

    gv.setAdapter(myAdapter);
    gv.setOnItemClickListener(this);
    

    并使用 onItemClick() 处理项目点击

    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        //Do something
    }
    

    【讨论】:

      【解决方案3】:

      这样做:

      public void onClick(View v) {
                  Intent intent = new Intent(getApplicationContext() , Main.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  startActivity(intent);
              }
      

      【讨论】:

        【解决方案4】:

        尝试在课程开始时设置上下文,如果不是你的活动,可能在构造函数中。你已经完成了。上下文。在那里使用它而不是获取新的上下文。

        【讨论】:

          【解决方案5】:

          对您的代码的一些更正..

          public View getView(int position,
                              final View convertView, ViewGroup parent) {
              Button btn = convertView;
          
              if (btn == null) {
                 btn = new Button(mContext);
                 btn.setOnClickListener(new OnClickListener() {
          
                    public void onClick(View v) {
                        Intent intent = new Intent(mContext, Main.class)
                        intent .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        mContext.startActivity(intent);
                    }
                 });
                 btn.setLayoutParams(new GridView.LayoutParams(350, 65));
                 btn.setPadding(8, 8, 8, 8);
                 btn.setWidth(LayoutParams.WRAP_CONTENT);
             }
             // set some text or do something
             ...
             return btn;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-10
            • 2012-08-13
            • 1970-01-01
            • 2015-02-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多