android - 将按钮 onClick 传递回主要 Activity 的最佳方式?

标签 android gridview button callback

我有一个 super TestUI 应用程序。它有一个带有按钮的 GridView 。

我希望将按钮点击的字词传递回主 Activity,以便它可以更新其状态。

可悲的是按钮窃取了点击。所以典型的:

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(TestUI.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });

不被调用。

取而代之的是在适配器定义中:

   public View getView(int position, View convertView, ViewGroup parent) {

    Button gridItem;

    if (convertView == null) {  // if it's not recycled, initialize some attributes
        gridItem = new Button(mContext);
    } else {
        gridItem = (Button) convertView;
    }
    gridItem.setText("button " + String.valueOf(position));
    gridItem.setClickable(true);
    gridItem.setFocusable(false);
    gridItem.setOnClickListener(new MyOnClickListener(position, mContext));

    return gridItem;

它由实现 OnClickListener 接口(interface)的 MyOnClickListener 类支持。但是,如果我这样做,我仍然需要回调到主要 Activity ,它需要以某种方式知道某些事情已经完成,因为它控制着程序状态。

那么通过单击按钮更新“根”类/Activity 状态的最佳方法是什么?

我知道这是一个基本的 OO 问题,但我主要用 ASM 和 C 编写,所以坦率地说,我只是不知道。

最佳答案

为什么需要有 2 个 onClickListeners。从 onItemClickListener 到主要 Activity ,您不能完成所有需要做的工作吗?适配器是否需要执行 MyOnClickListener 工作?

您可以在主 Activity 中设置 gridItem.setOnClickListener。无需每次都创建一个新的 ListenerObject。

你只需要一个 xml 来膨胀到包含 Button 的 getView

  <Button android:text="Handle me"
     android:id="@+id/btnHandleMe"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:onClick="buttonHandler"
     android:clickable="true">

并为您的 Activity 创建此功能。

public void buttonHandler(View v) {
        // Do your stuff here that new MyOnClickListener(position, mContext) whould do.
    }

您可以通过向适配器添加标签来获取此按钮在列表/网格中填充的行/列的位置。

在getView中添加

 gridItem.setTag(position)

并从 buttonHandler 中获取它

if(v.getTag instance of Integer)
int position = (Integer)v.getTag();

现在您可以处理来自 Activity 的所有点击,并且默认情况下 Activity 会收到通知。

关于android - 将按钮 onClick 传递回主要 Activity 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7313923/

相关文章:

c++ - 是否有单击组中任何按钮的事件?

java - 无法解析符号 'from'

android - 从 Android 中的原始文件夹播放音频

objective-c - 使用 Objective-C 可缩放/调整大小的网格

java - 按钮 ActionListener 同时运行两个组合框选项,为什么?

android - viewPager 的按钮 Activity ?

java - Android谷歌地图添加标记时出现空指针异常

android - SwipeRefreshLayout 与 NestedScrollView 和 LinearLayout

wpf - ListView 未拉伸(stretch)以适应内容 WPF XAML

javascript - 如果 DropDownList 选定索引已更改,则隐藏 gridview 行