You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为BubblePicker的每个气泡添加跳转对应Activity的功能?

实现BubblePicker气泡跳转至对应Activity的解决方案

嘿,我来帮你搞定这个气泡跳转的问题!你猜的完全没错,跳转逻辑就是要写在onBubbleSelected方法里,不过先帮你把代码里的小问题修正,再一步步实现跳转功能:

步骤1:准备目标Activity的Class数组

首先,你需要把要跳转的10个Activity的Class对象整理成一个数组,顺序必须和你的titles数组完全对应(第一个气泡对应第一个Activity,以此类推)。在你的Main777Activity类里添加这个数组:

// 替换成你实际的10个Activity类名,顺序要和titles数组一致
private final Class<?>[] targetActivities = {
        FirstActivity.class,
        SecondActivity.class,
        ThirdActivity.class,
        FourthActivity.class,
        FifthActivity.class,
        SixthActivity.class,
        SeventhActivity.class,
        EighthActivity.class,
        NinthActivity.class,
        TenthActivity.class
};

步骤2:给PickerItem标记位置

为了能准确知道点击的是第几个气泡,我们在创建PickerItem的时候,把它的位置存到tag属性里,修改getItem方法:

@NotNull
@Override
public PickerItem getItem(int position) {
    PickerItem item = new PickerItem();
    item.setTitle(titles[position]);
    item.setGradient(new BubbleGradient(colors.getColor((position * 2) % 8, 0), colors.getColor((position * 2) % 8 + 1, 0), BubbleGradient.VERTICAL));
    item.setTextColor(ContextCompat.getColor(Main777Activity.this, android.R.color.white));
    // 关键:把当前位置存到item的tag里,方便后续获取
    item.setTag(position);
    return item;
}

步骤3:修改onBubbleSelected实现跳转逻辑

现在可以在选中气泡的回调里,根据标记的位置启动对应的Activity了,同时要删掉原代码里多余的picker.setListener(this);(重复设置监听器会导致异常):

picker.setListener(new BubblePickerListener() {
    @Override
    public void onBubbleSelected(@NotNull PickerItem item) {
        // 从tag里取出当前气泡的位置
        int position = (int) item.getTag();
        // 检查位置是否在数组范围内,避免崩溃
        if (position >= 0 && position < targetActivities.length) {
            // 创建跳转Intent并启动Activity
            Intent intent = new Intent(Main777Activity.this, targetActivities[position]);
            startActivity(intent);
        }
    }

    @Override
    public void onBubbleDeselected(@NotNull PickerItem item) {
        // 取消选中不需要做操作,留空即可
    }
});

完整修改后的代码

这里给你整合好的完整代码,方便直接参考:

public class Main777Activity extends AppCompatActivity { 
    BubblePicker picker; 
    // 目标Activity数组,替换成你自己的Activity类
    private final Class<?>[] targetActivities = {
            FirstActivity.class,
            SecondActivity.class,
            ThirdActivity.class,
            FourthActivity.class,
            FifthActivity.class,
            SixthActivity.class,
            SeventhActivity.class,
            EighthActivity.class,
            NinthActivity.class,
            TenthActivity.class
    };

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main777); 
        final String[] titles = getResources().getStringArray(R.array.hashtags); 
        final TypedArray colors = getResources().obtainTypedArray(R.array.colors); 
        picker = findViewById(R.id.picker); 
        picker.setAdapter(new BubblePickerAdapter() { 
            @Override 
            public int getTotalCount() { 
                return titles.length; 
            } 
            @NotNull 
            @Override 
            public PickerItem getItem(int position) { 
                PickerItem item = new PickerItem(); 
                item.setTitle(titles[position]); 
                item.setGradient(new BubbleGradient(colors.getColor((position * 2) % 8, 0), colors.getColor((position * 2) % 8 + 1, 0), BubbleGradient.VERTICAL)); 
                item.setTextColor(ContextCompat.getColor(Main777Activity.this, android.R.color.white));
                // 标记气泡位置
                item.setTag(position); 
                return item; 
            } 
        }); 
        picker.setBubbleSize(45); 
        picker.setSwipeMoveSpeed(2f); 
        picker.setAlwaysSelected(false); 
        picker.setMaxSelectedCount(1); 
        picker.setListener(new BubblePickerListener() { 
            @Override 
            public void onBubbleSelected(@NotNull PickerItem item) { 
                int position = (int) item.getTag();
                if (position >= 0 && position < targetActivities.length) {
                    Intent intent = new Intent(Main777Activity.this, targetActivities[position]);
                    startActivity(intent);
                }
            } 
            @Override 
            public void onBubbleDeselected(@NotNull PickerItem item) { 
            } 
        }); 
    } 
    @Override 
    protected void onResume() { 
        super.onResume(); 
        picker.onResume(); 
    } 
    @Override 
    protected void onPause() { 
        super.onPause(); 
        picker.onPause(); 
    } 
}

新手注意事项

  • 确保targetActivities数组的长度和titles数组完全一致(都是10个),否则会出现数组越界崩溃。
  • 所有要跳转的Activity都必须在AndroidManifest.xml里注册,比如:
    <activity android:name=".FirstActivity"/>
    <activity android:name=".SecondActivity"/>
    <!-- 剩下的Activity也要依次注册 -->
    
  • 如果你的Activity需要传递数据,可以在Intent里用putExtra()方法添加数据。

内容的提问来源于stack exchange,提问作者dvlpd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:26:26