android - 将数据从一个活动传递到第二个活动的列表

时间:2011-11-03 06:17:01

标签: android list android-activity

droid编程新手。我有一个小问题,我肯定只是修复但我已经完成了一些搜索和一堆教程,但似乎无法找到我需要的所以我想id问。我的应用程序有2个活动,第一个活动只是一个简单的表单,用户输入课程信息(课程名称,教授等。) 第一个活动传递应该存储在第二个活动的列表中的数据。问题是只有第一个课程存储在列表中,在第一次没有新的东西被添加到第二个活动。有人能指出我正确的方向吗?提前谢谢

第一项活动

public class CourseDetail extends Activity {

//Course c = new Course();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button save=(Button)findViewById(R.id.save);
    save.setOnClickListener(onSave);
}

private View.OnClickListener onSave=new View.OnClickListener() {

    public void onClick(View v) {
        EditText course=(EditText)findViewById(R.id.course);
        EditText professor=(EditText)findViewById(R.id.professor);
        EditText location=(EditText)findViewById(R.id.location);
        EditText officehrs=(EditText)findViewById(R.id.officehrs);

        Intent i=new Intent(CourseDetail.this, CourseList.class);
        i.putExtra("myCourse", course.getText().toString());
        i.putExtra("myProfessor", professor.getText().toString());
        i.putExtra("myLocation", location.getText().toString());
        i.putExtra("myOfficehrs", officehrs.getText().toString());
        startActivity(i);
    }
};
}

第二项活动

public class CourseList extends Activity {
Button btnCourse; 
List<Course> model = new ArrayList<Course>();
CourseAdapter adapter=null;
private String dCourse="";
private String dProfessor="";
private String dLocation="";
private String dOfficehrs="";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.clist);
    ListView list =(ListView)findViewById(R.id.courses);
    adapter=new CourseAdapter();
    list.setAdapter(adapter);

    Course c = new Course();        
    Bundle extras = getIntent().getExtras();
    dCourse = extras !=null ? extras.getString("myCourse") :"no value entered";
    dProfessor = extras !=null ? extras.getString("myProfessor") :"no value entered";
    dLocation = extras !=null ? extras.getString("myLocation") :"no value entered";
    dOfficehrs = extras !=null ? extras.getString("myOfficehrs") :"no value entered";

    c.setCourse(dCourse);
    c.setProfessor(dProfessor);
    c.setLocation(dLocation);
    c.setOfficeHrs(dOfficehrs);


    btnCourse =(Button)findViewById(R.id.btnCourse);
    btnCourse.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            finish();
        }
    });

}

4 个答案:

答案 0 :(得分:0)

问题是你没有在设置适配器之前将新添加的项添加到List.So,你必须添加所有对象,如

 list.add(c);

答案 1 :(得分:0)

您只是在CourseDetail活动中获取用户输入的值并在CourseList活动中显示收到的值,这意味着您不会永久存储这些值。

浏览此Android - Data Storage文档。

当你转到第二个活动,即CourseList活动时,那时从SQLite表中获取数据并显示相同的数据。每当您从之前的活动中获得新值时,只需通过在ArrayList中添加新数据来更新列表,并在 adapter.notifyDataSetChanged()

上进行调用

答案 2 :(得分:0)

一些建议:

  • CourseList扩展ListActivity而不只是Activity - 查看一些有助于您正确设置的教程。
  • 您处理列表的方式似乎有些混乱 - 您拥有model变量,但似乎没有做任何事情。再看一下ListView教程(只是谷歌“android listview教程”)。
  • 您似乎已经发现可以使用“意图”将信息从一个活动传递到另一个活动,但由于您只是在onCreate()方法中执行此操作,因此它只发生一次。尝试在ListActivity的适配器中为每个项目执行此操作一次。

不要放弃Android,继续尝试: - )

答案 3 :(得分:0)

一些建议:

  1. 收到数据后,您必须将对象添加到适配器:adapter.add(c);

  2. 调用adapter.notifyDataSetChanged()通知系统您的listView数据已更改。请致电list.invalidate()进行刷新。

  3. 我注意到您使用finish()方法设置了按钮。嗯,如果你这样做,下次从CourseDetail到达CourseList Activity时,适配器将再次为null。以前没有收到过的数据。这是你真正想要的吗?