Android中如何从函数类获取值并在主类中显示结果?
在Android中从函数类获取值并在主类显示的解决方案
我来帮你搞定这个问题~首先得先指出你现有代码里的两个小问题:
cekberhasil()是void类型方法,没有返回值,主类没法直接拿到里面的berhasil变量- 循环逻辑有问题:每次循环都会重置
berhasil的值,哪怕前面已经找到符合条件的情况,最后也会被覆盖,应该找到符合条件就停止判断
下面给你几种可行的解决方案:
方案一:让函数类方法直接返回结果
这是最直接的方式,修改函数类的方法,让它返回判断后的字符串结果:
函数类修改后的代码
public class YourFunctionClass { // 假设GRID_AREA和mIndexes是这个类的成员变量 private static final int GRID_AREA = 3; private int[] mIndexes; // 修改方法为返回String类型 public String cekberhasil() { // 先默认设为空 String hasil = ""; // 原循环里的i其实没用到,直接判断即可 if(mIndexes[0] == 0 && mIndexes[1] == 1 && mIndexes[2] == 2){ hasil = "success"; } return hasil; // 如果确实需要遍历逻辑,找到符合条件后直接返回避免覆盖: // for (int i = 0; i < GRID_AREA; i++) { // if(mIndexes[0] == 0 && mIndexes[1]==1 && mIndexes[2]==2){ // return "success"; // } // } // return ""; } }
主类中调用并显示
在主类的onCreate(或者你需要的地方)调用这个方法,拿到结果后显示,比如用Toast或者TextView:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 补全你的原有代码 setContentView(R.layout.your_layout); // 实例化函数类 YourFunctionClass functionClass = new YourFunctionClass(); // 假设你已经给mIndexes赋值 functionClass.mIndexes = new int[]{0,1,2}; // 调用方法获取结果 String result = functionClass.cekberhasil(); // 用Toast显示结果 Toast.makeText(this, result.isEmpty() ? "未成功" : result, Toast.LENGTH_SHORT).show(); // 或者显示到TextView TextView tvResult = findViewById(R.id.tv_result); tvResult.setText(result); }
方案二:使用回调接口(适合异步场景)
如果你的cekberhasil涉及异步操作(比如耗时计算、网络请求),用回调会更合适:
第一步:定义回调接口
public interface OnCheckResultListener { void onResult(String result); }
第二步:修改函数类,持有回调接口
public class YourFunctionClass { private int[] mIndexes; private OnCheckResultListener mListener; // 设置回调的方法 public void setOnCheckResultListener(OnCheckResultListener listener) { this.mListener = listener; } public void cekberhasil() { String hasil = ""; if(mIndexes[0] == 0 && mIndexes[1] == 1 && mIndexes[2] == 2){ hasil = "success"; } // 把结果回调给主类 if(mListener != null){ mListener.onResult(hasil); } } }
第三步:主类中设置回调并处理结果
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 你的其他原有代码... setContentView(R.layout.your_layout); YourFunctionClass functionClass = new YourFunctionClass(); functionClass.mIndexes = new int[]{0,1,2}; // 设置回调 functionClass.setOnCheckResultListener(new OnCheckResultListener() { @Override public void onResult(String result) { // 在这里处理结果,比如显示 Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); } }); // 执行判断方法 functionClass.cekberhasil(); }
方案三:给成员变量添加Getter方法
如果你想保留原有的void方法,也可以给berhasil变量添加Getter方法:
函数类修改
public class YourFunctionClass { private int[] mIndexes; // 把berhasil设为类的成员变量 private String berhasil = ""; public void cekberhasil() { berhasil = ""; if(mIndexes[0] == 0 && mIndexes[1] == 1 && mIndexes[2] == 2){ berhasil = "success"; } // 优化掉不必要的循环 } // 添加Getter方法供主类获取值 public String getBerhasil() { return berhasil; } }
主类调用
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 你的其他原有代码... setContentView(R.layout.your_layout); YourFunctionClass functionClass = new YourFunctionClass(); functionClass.mIndexes = new int[]{0,1,2}; // 先执行判断方法 functionClass.cekberhasil(); // 通过Getter获取结果 String result = functionClass.getBerhasil(); // 显示结果 Toast.makeText(this, result, Toast.LENGTH_SHORT).show(); }
另外提醒一下:原代码里的循环for (int i = 0; i < GRID_AREA; i++)其实没用到变量i,判断条件和i无关,所以可以直接去掉循环,直接判断mIndexes的条件就行,避免不必要的性能消耗哦~
内容的提问来源于stack exchange,提问作者Kerikil Tajam
相关产品推荐
相关产品推荐

