android — передача данных из одного действия в список во втором действии

#android #list #android-activity

#Android #Список #android-activity

Вопрос:

новое в программировании droid. у меня небольшая проблема, которую, я уверен, просто исправлена, но я провел некоторый поиск и изучил кучу руководств, но, похоже, не могу найти именно то, что мне нужно, поэтому я решил спросить. В моем приложении есть 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();
        }
    });

}
  

Комментарии:

1. Как вы узнали, что сохраняется только первый курс?

2. запуск эмулятора droid и использование приложения очевидны очень быстро

Ответ №1:

Вы просто получаете введенное пользователем значение в действии CourseDetail и отображаете полученное значение в действии CourseList, это означает, что вы не сохраняете эти значения постоянно.

Просмотрите этот документ для хранения Android-данных.

Когда вы переходите ко 2-му действию, т.Е. к действию списка курсов, в это время извлекайте данные из таблицы SQLite и отображайте их. всякий раз, когда вы получаете новые значения из предыдущего действия, в это время просто обновляйте список, добавляя новые данные в ArrayList и вызывая adapter.notifyDataSetChanged()

Ответ №2:

Некоторые предложения:

  • CourseList ListActivity Вместо того, чтобы просто расширять Activity , ознакомьтесь с некоторыми руководствами по тому, что должно помочь вам правильно настроить.
  • Похоже, есть небольшая путаница в том, как вы обрабатываете свои списки — у вас есть ваша model переменная, но, похоже, вы ничего с ней не делаете. Опять же, взгляните на учебник по просмотру списка (просто Google «android listview tutorial»).
  • Кажется, вы поняли, что можете использовать «намерения» для передачи информации из одного действия в другое, но поскольку вы делаете это только в onCreate() методе, это происходит только один раз. Попробуйте сделать это в вашем ListActivity адаптере один раз для каждого элемента.

Не отказывайтесь от Android, продолжайте пытаться 🙂

Ответ №3:

Некоторые предложения:

  1. Вы должны добавить свой объект в адаптер: adapter.add(c); после получения данных.

  2. Вызов adapter.notifyDataSetChanged() , чтобы уведомить систему о том, что ваши данные для ListView были изменены. Вызовите list.invalidate() , чтобы обновить его.

  3. Я заметил, что вы установили кнопку с finish() помощью метода. Хм, если вы это сделаете, в следующий раз, когда вы перейдете к действию списка курсов из CourseDetail, адаптер снова будет нулевым. Ранее полученные данные не будут доступны. Это то, чего вы действительно хотите?

Ответ №4:

Проблема в том, что вы не добавляете вновь добавленные элементы в список.Поэтому перед установкой адаптера вы должны добавить все свои объекты, такие как

  list.add(c);
  

Комментарии:

1. пытаясь решить эту проблему, я перемещал «adapter.add (c)» и, должно быть, не понял, что я не вернул его обратно перед публикацией своего кода, но у меня есть эта строка, без этой строки курсы не добавляются, с ней все еще один, но я все еще пытаюсь ответить на другие вопросы