#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:
Некоторые предложения:
-
Вы должны добавить свой объект в адаптер:
adapter.add(c);
после получения данных. -
Вызов
adapter.notifyDataSetChanged()
, чтобы уведомить систему о том, что ваши данные для ListView были изменены. Вызовитеlist.invalidate()
, чтобы обновить его. -
Я заметил, что вы установили кнопку с
finish()
помощью метода. Хм, если вы это сделаете, в следующий раз, когда вы перейдете к действию списка курсов из CourseDetail, адаптер снова будет нулевым. Ранее полученные данные не будут доступны. Это то, чего вы действительно хотите?
Ответ №4:
Проблема в том, что вы не добавляете вновь добавленные элементы в список.Поэтому перед установкой адаптера вы должны добавить все свои объекты, такие как
list.add(c);
Комментарии:
1. пытаясь решить эту проблему, я перемещал «adapter.add (c)» и, должно быть, не понял, что я не вернул его обратно перед публикацией своего кода, но у меня есть эта строка, без этой строки курсы не добавляются, с ней все еще один, но я все еще пытаюсь ответить на другие вопросы