【问题标题】:How to set textview as method output in andrioid?如何在android中将textview设置为方法输出?
【发布时间】:2016-06-14 23:14:05
【问题描述】:

我最近才开始使用 android studio,目前我正在开发一个罗马数字翻译应用程序。该应用程序的界面如下所示:Application interface

用户将使用键盘输入一个整数,该整数将显示在上面显示的 TextView 上。当他们点击转换按钮时,它将获取他们输入的整数并进行转换(如果包含字符串或字符,程序将能够捕获输入)。然后应用程序将在用户点击“转换”按钮后将 TextView 重置为结果。

目前,我的主要活动包含用于按钮的 onClickListeners 和用于翻译的单独翻译器方法。我的问题是“转换”按钮我不确定如何从翻译方法获取输入并在完成转换后将其设置为 TextView。这是我的代码示例:

“转换”按钮监听器-`

convert.setOnClickListener(
                new View.OnClickListener() {
                    public void onClick(View v) {
                        TextView numeralInput = (TextView) findViewById(R.id.textView);
                        String intValue = numeralInput.getText().toString();
                        try{
                            int integer = Integer.parseInt(intValue);
                            if (integer > 0 && integer <= 4999){
                                translator(integer);

                            }else{
                                numeralInput.setText("Please enter an integer between 0 and 4,999.");
                            }

                        }catch(NumberFormatException e){
                            numeralInput.setText("Invalid input try again.");
                        }
                    }
                }
        );

`

翻译方法- `

public static void translator(int integer) {
        LinkedList<String> stack = new LinkedList<String>();
        // if (integer > 0 && integer <= 4999) {
        //ArrayList<Integer> placement = new ArrayList<Integer>();
        int place = (int) Math.log10(integer);
        for (int i = 0; i <= place; i++) {
            //while(integer > 0){
            //System.out.println(integer);
            int placeOfValue = integer % 10;
            //stack.push(placeOfValue);
            //System.out.print(stack);

            //System.out.print(placeOfValue +":" + i);
            String placement = "";
            switch (i) {
                case 0:
                    placement = ones(placeOfValue);

                    break;
                case 1:
                    placement = tens(placeOfValue);

                    break;
                case 2:
                    placement = hundreds(placeOfValue);

                    break;
                case 3:
                    placement = thousands(placeOfValue);

                    break;
                default:
                    break;
            }

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
                stack.push(placement);
            }
            integer = integer / 10;

            //System.out.print(placement);
            // System.out.println(placement.size());
            //}
//              for(int j = 0; j < placement.size(); j++){
//                                    double tenthPower = Math.floor(Math.log10(placement.get(j)));
//                                    double place = Math.pow(10, tenthPower);
//                                    System.out.println(place);
//
//              }
            // }
            while (!stack.isEmpty()) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
                    System.out.print(stack.pop());
                }
            }
//        } else {
//            System.out.println("Please enter an integer between 0 and 4,999.");
//        }

        }
    }

`

翻译器内部的其他方法就像一个罗马数字库,每个罗马数字都包含一个数字代表每个位值,如下所示。

千法-`

public static String thousands(int integer) {
        String thouValue = "";
        switch (integer) {

            case 1:
                thouValue = "M";
                //System.out.print("M");
                break;
            case 2:
                thouValue = "MM";
                //System.out.print("MM");
                break;
            case 3:
                thouValue = "MMM";
                //System.out.print("MMM");
                break;
            case 4:
                thouValue = "MMMM";
                //System.out.print("MMMM");
                break;
            default:
                thouValue = "";
                break;
        }
        return thouValue;
    }

`

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    让您的translator() 方法返回一个包含最终输出的字符串。

    所以在该方法中的while 语句之前,声明一个字符串,例如 String result = null; 并在循环中将弹出的值附加到此变量,例如 result += stack.pop()

    现在,调用translator(integer) 方法的地方,使用numeralInput.setText(translator(integer)) 而不是translator(integer)

    【讨论】:

    • @Prera​​kSola 感谢您的回复!到目前为止,我已经按照您所说的进行了操作,但遇到了错误。如前所述,我更改了方法调用以设置文本,但我的 android studio 说“无法解析方法'setText(void)'”如果我更改我的翻译器方法以返回字符串,这有助于解决问题吗?
    • 是的,将translator方法的返回类型改为String,最后从中返回变量result
    • 乐于助人... :)
    • @Prera​​k Sola 你能帮我回答这个问题吗专业人士stackoverflow.com/questions/67042935/…
    【解决方案2】:

    你需要让你的 TextView 成为一个类成员并在你的 oncreate 包中初始化它,这样你就可以在活动的其他地方访问 textview。

    TextView numeralInput;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_main);
        numeralInput = (TextView) findViewById(R.id.textView);
    
    convert.setOnClickListener(
                new View.OnClickListener() {
                    public void onClick(View v) {
    
                        String intValue = numeralInput.getText().toString();
                        try{
                            int integer = Integer.parseInt(intValue);
                            if (integer > 0 && integer <= 4999){
                                translator(integer);
    
                            }else{
                                numeralInput.setText("Please enter an integer between 0 and 4,999.");
                            }
    
                        }catch(NumberFormatException e){
                            numeralInput.setText("Invalid input try again.");
                        }
                    }
                }
        );
    

    【讨论】:

    • 感谢您的回复!我将不得不修复并在我的代码中添加一些东西,看看它是否有效并回复你。
    猜你喜欢
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多