Android开发:如何将自定义ArrayList数据应用到LuckyWheel幸运转盘
解决方案
你只需要将原有代码中硬编码的转盘内容替换为你从Intent拿到的自定义字符串列表即可,修改步骤如下:
- 首先对拿到的
Item列表做非空判断,避免空指针崩溃 - 将原有固定循环12次生成转盘数据的逻辑,改为遍历自定义字符串列表生成对应
LuckyItem - 调整随机索引生成逻辑适配动态列表长度,避免索引越界
- 简化选中回调的冗余判断代码
修改后的完整代码如下:
import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.util.ArrayList; import java.util.List; import java.util.Random; import androidx.appcompat.app.AppCompatActivity; import rubikstudio.library.LuckyWheelView; import rubikstudio.library.model.LuckyItem; public class Game extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_wheel); ArrayList<String> Item = getIntent().getStringArrayListExtra("key"); // 增加空判断避免崩溃 if (Item == null || Item.isEmpty()) { Toast.makeText(this, "未获取到自定义转盘数据", Toast.LENGTH_SHORT).show(); finish(); return; } LuckyWheelView luckyWheelView = findViewById(R.id.wheel); List<LuckyItem> data = new ArrayList<>(); // 遍历自定义列表生成转盘项 for (int i = 0; i < Item.size(); i++) { LuckyItem luckyItem = new LuckyItem(); // 把自定义字符串赋值给转盘项的文本 luckyItem.secondaryText = Item.get(i); data.add(luckyItem); } luckyWheelView.setData(data); luckyWheelView.setRound(getRandomRound()); luckyWheelView.setLuckyWheelBackgrouldColor(R.array.color_wheel); Button playBtn = findViewById(R.id.play); playBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int index = getRandomIndex(data.size()); luckyWheelView.startLuckyWheelWithTargetIndex(index); } }); luckyWheelView.setLuckyRoundItemSelectedListener(new LuckyWheelView.LuckyRoundItemSelectedListener() { @Override public void LuckyRoundItemSelected(int index) { // 去掉冗余的if判断,直接通用处理所有索引 Toast.makeText(getApplicationContext(), data.get(index).secondaryText, Toast.LENGTH_LONG).show(); } }); } private int getRandomRound() { Random rand = new Random(); return rand.nextInt(5) + 8; } // 修改随机索引方法,传入当前列表长度适配动态数据 private int getRandomIndex(int listSize) { Random rand = new Random(); // 索引范围从0到列表长度减1,避免越界 return rand.nextInt(listSize); } }
内容的提问来源于stack exchange,提问作者Ruslan Emelianov
相关产品推荐
相关产品推荐

