【问题标题】:How to set OnClickListener for view that is not in the main_activity.xml?如何为不在 main_activity.xml 中的视图设置 OnClickListener?
【发布时间】:2017-01-02 23:22:37
【问题描述】:

正如标题所说,我尝试为另一个 XML 文件中的视图设置 OnClickListener。我尝试了以下代码,虽然我没有得到任何异常,但它不起作用。

 LayoutInflater layoutInflater = getLayoutInflater();
    View view = layoutInflater.inflate(R.layout.single_row,null,false);
    mImageButton = (ImageButton)view.findViewById(R.id.shareImageButton);
    mImageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Snackbar.make(v, "working on it", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

我的 ImageButton 在另一个 XML 文件中。需要帮助

【问题讨论】:

  • 您实际上想做什么-您拥有的代码将设置一个 onclicklistener,但它不会将视图添加到 UI。您必须将视图添加到父级才能执行此操作。
  • 但是如何将视图添加到父级?即使我想在控制台上显示一条消息,它也不起作用。
  • 这是来自的xml,那个xml已经膨胀了吗?
  • 是的,single_row是用来展示recycleview的item的。我认为它已经在适配器中膨胀了。

标签: java android xml onclicklistener imagebutton


【解决方案1】:

根据所提供的内容,您似乎没有将视图添加到父布局中。

假设父布局已经膨胀,你只需添加视图,像这样

yourParentView.addView(view);

但这很可能不会产生预期的效果,因为这很可能(假设您没有玩过父级的重力)将视图放在左上角。

您需要通过 LayoutParams 将视图放置在您想要的位置。

示例是 RelativeLayout.LayoutParams 或 LinearLayout.LayoutParams

一旦您选择并创建了 layoutParams,您就可以使用它

yourParentView.addView(view, createdLayoutParams);

【讨论】:

  • 我发现了问题。我将设置监听器的代码移到了我的 recycleview.adapter 类中,效果很好。
【解决方案2】:

通过将其包含在 main_activity.xml 文件中来使用您的另一个 single_row.xml。

将以下代码粘贴到您的 main_activity.xml 文件中:

<include layout:"@layout/single_row.xml" />

现在您可以像 main_activity.xml 中的其他视图一样正常使用 ImageButton。在 MainActivity.class 的 onCreate() 方法中添加以下代码。

ImageButton mImageButton = (ImageButton)findViewById(R.id.shareImageButton);
mImageButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Snackbar.make(v, "working on it", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show();
    }
});

【讨论】:

  • 我发现了问题。我将设置监听器的代码移到了我的 recycleview.adapter 类中,效果很好
  • 很高兴您得到了解决方案。希望我的回答对其他人有所帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多