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

android-在第二个活动中将数据从一个活动传递到列表,android,list,android-activity,Android,List,Android Activity,droid编程新手。我有一个小问题,我肯定是简单地解决了,但我做了一些搜索和一大堆教程,但似乎无法找到我需要的,所以我想我会问。我的应用程序有两个活动,第一个活动只是一个简单的表单,用户可以在其中输入课程信息(课程名称、教授等) 第一个活动传递应该存储在第二个活动列表中的数据。问题是,在第一次之后,只有第一个课程存储在列表中,第二个活动中没有添加任何新内容。有人能给我指一下正确的方向吗?提前谢谢 第一项活动 public class CourseDetail extends Activity {

droid编程新手。我有一个小问题,我肯定是简单地解决了,但我做了一些搜索和一大堆教程,但似乎无法找到我需要的,所以我想我会问。我的应用程序有两个活动,第一个活动只是一个简单的表单,用户可以在其中输入课程信息(课程名称、教授等) 第一个活动传递应该存储在第二个活动列表中的数据。问题是,在第一次之后,只有第一个课程存储在列表中,第二个活动中没有添加任何新内容。有人能给我指一下正确的方向吗?提前谢谢

第一项活动

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();
        }
    });

}
公共类课程列表扩展活动{
按钮BTN课程;
列表模型=新的ArrayList();
CourseAdapter适配器=空;
私有字符串dCourse=“”;
私有字符串dProfessor=“”;
私有字符串dLocation=“”;
私有字符串dOfficehrs=“”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.clist);
ListView列表=(ListView)findViewById(R.id.courses);
适配器=新coursedapter();
list.setAdapter(适配器);
课程c=新课程();
Bundle extras=getIntent().getExtras();
dCourse=extras!=null?extras.getString(“myCourse”):“未输入值”;
dProfessor=extras!=null?extras.getString(“myProfessor”):“未输入值”;
dLocation=extras!=null?extras.getString(“myLocation”):“未输入值”;
dOfficehrs=extras!=null?extras.getString(“myOfficehrs”):“未输入值”;
c、 设置课程(dCourse);
c、 setProfessor(dProfessor);
c、 设置位置(dLocation);
c、 办公时间(dOfficehrs);
BTN课程=(按钮)findViewById(R.id.BTN课程);
btnCourse.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
完成();
}
});
}

问题在于您没有将新添加的项目添加到列表中。因此,在设置适配器之前,您必须添加所有对象,如

 list.add(c);

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

仔细阅读这份文件

当您移动到第二个活动,即CourseList活动时,此时从SQLite表中获取数据并显示相同的数据。每当您从以前的活动中获得新值时,此时只需通过在ArrayList中添加新数据来更新列表,并调用
适配器。notifyDataSetChanged()

一些建议:

  • 让您的
    课程列表
    扩展
    列表活动
    ,而不仅仅是
    活动
    ——查看一些教程,这些教程可以帮助您正确设置内容
  • 你如何处理列表似乎有点混乱-你有你的
    模型
    变量,但似乎没有对它做任何事情。再次,看一看ListView教程(只是谷歌的“android ListView教程”)
  • 您似乎已经意识到可以使用“意图”将信息从一个活动传递到另一个活动,但由于您仅在
    onCreate()
    方法中执行此操作,因此此操作仅发生一次。请尝试在
    ListActivity
    的适配器中为每个项目执行一次
不要放弃Android,继续尝试:-)

一些建议:

  • 您必须将对象添加到适配器:
    adapter.add(c);
    获取数据后

  • 调用
    adapter.notifyDataSetChanged()
    通知系统listView的数据已更改。调用
    list.invalidate()
    刷新它

  • 我注意到您使用
    finish()
    方法设置了按钮。嗯,如果您这样做,下次从CourseDetail访问CourseList活动时,适配器将再次为空。以前收到的数据将不可用。这是您真正想要的吗


  • 你是怎么知道只有第一门课程被保存的?运行droid模拟器并使用应用程序显然非常快,在试图解决它时,我移动了“adapter.add(c)”在我发布代码之前,我肯定没有意识到我没有把它放回去,但我有那一行,没有那一行,没有任何课程被添加,有了它,仍然是一个,但我仍然在尝试其他答案