在Android Studio中的OnClick类之间共享数组

时间:2015-07-08 22:32:53

标签: java android arrays class android-intent

我正在编写一个从用户那里获取输入的代码,然后用户点击"输入另一个活动"按钮或"完成"按钮。我目前正在使用enterAnotherButton onClickListener中的信息,但我需要能够将信息传输到doneButton onClickListener以通过intent发送到另一个Activity。这是我目前的代码:

public class EnterCourseActivity extends ActionBarActivity {
private MainActivity ma;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_enter_course);

    buttonClick();
}

public void buttonClick () {

    Button enterAnotherButton = (Button) findViewById(R.id.enterAnotherButton);
    enterAnotherButton.setOnClickListener(new View.OnClickListener() {
          int i = 1;
          public void onClick(View view) {
            EditText courseName;
            courseName = (EditText) findViewById(R.id.inputCourseName);
            String courseNameString = courseName.getText().toString();
            String[] courses = new String[i];
            courses[i - 1] = courseNameString;
            i++;
            courseName.setText("");
          }
        });

    Button doneButton = (Button) findViewById(R.id.doneButton);
    doneButton.setOnClickListener(new View.OnClickListener(){
        public void onClick(View view){

        }
    });

    //when user clicks doneButton execute this
        ArrayList<String> coursesArrayList = new ArrayList<String>(Arrays.asList(courses));
        Intent i = new Intent(EnterCourseActivity.this, MainActivity.class);
        i.putStringArrayListExtra("course", coursesArrayList);

        startActivity(i);
}

3 个答案:

答案 0 :(得分:1)

正如@feantury建议的那样,只需创建一个类来存放您正在保存的信息。然后,您可以在doneButton单击时访问同一个对象。

public void buttonClick () {
    final SampleObj obj = new SampleObj("test");
    Button enterAnotherButton = (Button) findViewById(R.id.enterAnotherButton);
    enterAnotherButton.setOnClickListener(new View.OnClickListener() {
        int i = 1;
        public void onClick(View view) {
            obj.courseName = "test1";
        }
    });

    Button doneButton = (Button) findViewById(R.id.doneButton);
    doneButton.setOnClickListener(new View.OnClickListener(){
        public void onClick(View view){
            Log.d(TAG, "Result of obj: " + obj.courseName);
        }
    });
}

class SampleObj {
    String courseName;

    public SampleObj(String courseName) {
        this.courseName = courseName;
    }
}

单击enterAnotherButton将obj.courseName更改为“test1”,然后可以在onButton on onButton中访问它。

答案 1 :(得分:0)

那里真的很复杂。只需创建一个class属性来存储您的活动状态值。属性可以在匿名类之间共享,例如您为onClick事件创建的类。

答案 2 :(得分:0)

我希望我能正确理解这个问题,但这就是我要做的事情:

public class EnterCourseActivity extends ActionBarActivity {

    private ArrayList<String> courses;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_enter_course);

        courses = new ArrayList<String>();

        buttonClick();
    }

    public void buttonClick () {
        final EditText courseName;
        courseName = (EditText) findViewById(R.id.inputCourseName);

        Button enterAnotherButton = (Button) findViewById(R.id.enterAnotherButton);
        enterAnotherButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                String courseNameString = courseName.getText().toString();
                courses.add(courseNameString);
                courseName.setText("");
            }
        });

        Button doneButton = (Button) findViewById(R.id.doneButton);
        doneButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view){
                Intent i = new Intent(EnterCourseActivity.this, MainActivity.class);
                i.putStringArrayListExtra("courses", courses);

                startActivity(i);
            }
        });
     }
 }

因此,无需创建String[]数组,然后每次添加新项目时重新创建它,只需从开始创建ArrayList<String>并在每次用户想要添加时调用.add(course)一门新课程。

没有理由在EditText courseName = (EditText) findViewById(R.id.inputCourseName);内拨打View.OnClickListener(),因为您只需要找一次,而不是每次添加新课程。

在完成按钮中,只需启动活动并传递courses ArrayList,现在也没有理由拨打ArrayList<String> coursesArrayList = new ArrayList<String>(Arrays.asList(courses));