如何将值从方法传递到另一个方法

时间:2014-08-24 11:25:19

标签: android

            import android.support.v4.app.Fragment;
            import android.app.Activity;
            import android.app.Dialog;
            import android.content.Context;
            import android.os.Bundle;
            import android.view.LayoutInflater;
            import android.view.Menu;
            import android.view.MenuItem;
            import android.view.MotionEvent;
            import android.view.View;
            import android.view.View.OnTouchListener;
            import android.view.ViewGroup;
            import android.view.View.OnClickListener;
            import android.view.inputmethod.InputMethodManager;
            import android.widget.*;
            import android.widget.NumberPicker.OnValueChangeListener;

            public class MainActivity extends Activity implements OnValueChangeListener {

                EditText push_ups, sit_ups;
                NumberPicker np;
                Button calculate;
                final Context context = this;
                CheckBox checkbox;
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);

                    calculate = (Button)findViewById(R.id.calculate);
                    push_ups = (EditText)findViewById(R.id.pushups);
                    sit_ups = (EditText)findViewById(R.id.situps);
                    np = (NumberPicker)findViewById(R.id.np1);
                    checkbox = (CheckBox)findViewById(R.id.checkbox);

                    String[] values = {"some array"};       
                    np.setMaxValue(values.length-1);
                    np.setMinValue(0);
                    np.setDisplayedValues(values);       
                    np.setWrapSelectorWheel(false);
当我点击"计算"

// calculateButton运行按钮

                    calculateButton();

                    LinearLayout layout = (LinearLayout)findViewById(R.id.linearLayout1);
                    layout.setOnTouchListener(new OnTouchListener() {

                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                            hideKeyboard();
                            return false;
                        }

                    }); 
                }


                @Override
                public boolean onCreateOptionsMenu(Menu menu) {

                    // Inflate the menu; this adds items to the action bar if it is present.
                    getMenuInflater().inflate(R.menu.main, menu);
                    return true;
                }

                @Override
                public boolean onOptionsItemSelected(MenuItem item) {
                    // Handle action bar item clicks here. The action bar will
                    // automatically handle clicks on the Home/Up button, so long
                    // as you specify a parent activity in AndroidManifest.xml.
                    int id = item.getItemId();
                    if (id == R.id.action_settings) {
                        return true;
                    }
                    return super.onOptionsItemSelected(item);
                }

                /**
                 * A placeholder fragment containing a simple view.
                 */
                public static class PlaceholderFragment extends Fragment {

                    public PlaceholderFragment() {
                    }

                    @Override
                    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
                        View rootView = inflater.inflate(R.layout.fragment_main, container,
                                false);
                        return rootView;
                    }
                }

                @Override
                public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

                }

                private void hideKeyboard() {
                    InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(push_ups.getWindowToken(), 0);
                }

                public int calculatePushups() {
                    int pushupScore = 0;
                    int ageGroup = Integer.parseInt(null, np.getValue());
                    int pushupReps = Integer.parseInt(push_ups.getText().toString());
                    final int [][] pushupTable = {"some 2D array"};

                    if (pushupReps<= 60) {
                        pushupScore = pushupTable[pushupReps][ageGroup];
                    } else {
                        pushupScore = 60;
                    }
                return pushupScore;
                }

                public int calculateSitups() {
                    final int [][] situpTable = {"some 2D array"};
                    return 0;

                }

                private void normalRun() {

                }

                private void specialRun() {

                }

                private void calculateRun() {
                    if (checkbox.isChecked()) {
                        specialRun();
                    }
                    else {
                        normalRun();
                    }
                }

                private void calculateScore() {
                    calculatePushups();
                    calculateSitups();
                    calculateRun();
                }
                public void calculateButton() {

                    final TextView pus = (TextView)findViewById(R.id.pushup_score);

                    calculate.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // custom dialog
                            final Dialog dialog = new Dialog(context);
                            dialog.setContentView(R.layout.dialog_custom);
                            dialog.setTitle("Score");

我正在尝试将TextView设置为在此处显示pushupScore,但似乎我正在尝试将结果从另一个方法传递给此。我不知道如何使用android继续使用它,

                            //pus.setText(pushupScore);

                            pus.setText(String.valueOf(calculatePushups()));

                            Button dialogButton = (Button) dialog.findViewById(R.id.dialog_ok);
                            // if button is clicked, close the custom dialog
                            dialogButton.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    dialog.dismiss();
                                }
                            });

                            dialog.show();
                          }
                        });
                }
            }

这是我的对话框XML代码:                                  

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" >

                    <TextView
                        android:id="@+id/textView1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:lineSpacingExtra="5dp"
                        android:text="Push-ups: "
                        android:textAppearance="?android:attr/textAppearanceMedium" />

                    <TextView
                        android:id="@+id/pushup_score"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="4.97"
                        android:textAppearance="?android:attr/textAppearanceMedium" />
                </LinearLayout>

                <TextView
                    android:id="@+id/textView2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:lineSpacingExtra="5dp"
                    android:text="Sit-ups: "
                    android:textAppearance="?android:attr/textAppearanceMedium" />

                <TextView
                    android:id="@+id/textView3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:lineSpacingExtra="5dp"
                    android:text="2.4km Run: "
                    android:textAppearance="?android:attr/textAppearanceMedium" />

                <TextView
                    android:id="@+id/textView4"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:lineSpacingExtra="5dp"
                    android:text="Award: "
                    android:textAppearance="?android:attr/textAppearanceLarge" />

                <Button
                    android:id="@+id/dialog_ok"
                    style="@style/AppTheme"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:lineSpacingExtra="5dp"
                    android:text="Ok" />

            </LinearLayout>

2 个答案:

答案 0 :(得分:0)

你要在calculatePushups中返回pushupScore,所以只需写:

pus.setText(String.valueOf(calculatePushups()));

顺便说一下这不是一个android机制,这是简单的java返回用法: http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

答案 1 :(得分:0)

您遗漏了相当多的代码,所以我不确定您的问题在哪里,但如果您可以按照这些步骤告诉我您是否遇到任何错误等?无论如何,这是你需要的:

确保您的Activity实现OnClickListener:

public class MainActivity extends Activity implements OnClickListener, OnValueChangeListener {
    //...
}

在活动的重写onCreate()方法中,将活动注册为处理程序:

calculate = (Button)v.findViewById(R.id.dialog_ok);
calculate.setOnClickListener(this);

MainActivity内,让处理程序如下:

public void onClick(View v){
    switch(v.getId(){
        case R.id.dialog_ok:
            push_ups.setText("" + calculatePushups());
        break;
    }
    // ...
}

也许您应该将EditText更改为TextViewEditText不是必需的,可能会导致问题?

这是你追求的吗?