У меня есть следующий сценарий в простом приложении: 1- пользователь нажимает кнопку меню на MainActivity, чтобы открыть другое действие на совершенно новом экране: addTimeActivity, где они могут ввести заметку и пора. 2- В новом действии есть два текста редактирования: время и примечание, пользователь вводит данные, а затем нажимает кнопку «Сохранить», или они могут нажать кнопку «Отмена», когда они не хотят сохранять заметку. 3- addTimeActiviy передает данные через намерение. 4- надстройка addTimeActivity. 5- Данные должны быть сохранены в адаптере, который, в свою очередь, отображает его как список в MainActivity, метод addTimeRecord в TimeTrackerAdapter добавляет данные String к временам ArrayList. Теперь, когда нажата кнопка сохранения, появляется исключение NullPointerException.Передача данных между действиями не работает
Вот MainActivity:
public class MainActivity extends ActionBarActivity {
ListView listView;
TimeTrackerAdapter timeTrackerAdapter;
public static final int TIME_ENTRY_REQUEST_CODE=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timeTrackerAdapter=new TimeTrackerAdapter();
listView=(ListView) findViewById(R.id.recordList);
listView.setAdapter(timeTrackerAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
super.onCreateOptionsMenu(menu);
MenuInflater menuInflater=getMenuInflater();
menuInflater.inflate(R.menu.menu_list_item, menu);
return true;
}
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
if(requestCode==TIME_ENTRY_REQUEST_CODE)
{
if(resultCode==RESULT_OK)
{
Bundle extras=getIntent().getExtras();
String time=extras.getString("time");
String notes=extras.getString("notes");
timeTrackerAdapter.addTimeRecord(time, notes);
timeTrackerAdapter.notifyDataSetChanged();
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
if(item.getItemId()==R.id.add_time_menu_item)
{
Intent intent=new Intent(getApplicationContext(),AddTimeActivity.class);
startActivityForResult(intent,TIME_ENTRY_REQUEST_CODE);
return true;
}
return super.onOptionsItemSelected(item);
} }
и вот addTimeActivity:
public class AddTimeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.add_time);
}
public void onCancel(View view)
{
finish();
}
public void onSave(View view)
{
Intent intent = new Intent(AddTimeActivity.this,MainActivity.class);
EditText editTextNotes=(EditText) findViewById(R.id.notes_edit_text);
intent.putExtra("notes",editTextNotes.getText().toString());
EditText editTextTime=(EditText) findViewById(R.id.time_edit_text);
intent.putExtra("time", editTextTime.getText().toString());
this.setResult(RESULT_OK,intent);
startActivity(intent);
finish();
}
}
Адаптер:
public class TimeTrackerAdapter extends BaseAdapter{
ArrayList<TimeRecord> times=new ArrayList<TimeRecord>();
TextView timeView,noteView;
@Override
public int getCount() {
// TODO Auto-generated method stub
return times.size();
}
public TimeTrackerAdapter()
{
}
@Override
public Object getItem(int index) {
// TODO Auto-generated method stub
return getItem(index);
}
@Override
public long getItemId(int index) {
// TODO Auto-generated method stub
return index;
}
public void addTimeRecord(String time,String notes)
{
TimeRecord timeRecord=new TimeRecord(time,notes);
times.add(timeRecord);
}
@Override
public View getView(int index, View view, ViewGroup parent) {
// TODO Auto-generated method stub
if(view==null)
{
LayoutInflater inflater=LayoutInflater.from(parent.getContext());
view=inflater.inflate(R.layout.time_tracker, parent,false);
}
TimeRecord time=times.get(index);
TextView timeText=(TextView) view.findViewById(R.id.timeText);
timeText.setText(time.getTime());
TextView noteText=(TextView) view.findViewById(R.id.noteText);
noteText.setText(time.getNote());
return view;
}
}
check onSave() onCancel() методы в AddTimeActivity. Надеюсь, что не будет переопределенных методов в классе Activity – Shriram
Можете ли вы разместить свой код 'add_time'? – Prasad
Я думаю, что вы установили метод onCancel для сохранения нажатия кнопки. Пожалуйста, проверьте xml один раз – Prasad