Я использую Parse.com для заполнения ListView во втором действии моего приложения. При нажатии на элемент в ListView открывается третье действие. Проблема в том, что при использовании кнопки «Вверх» для возврата во второе действие ListView исчез. По какой-то причине это поведение не происходит, когда используется кнопка «Назад». Кроме того, это не происходит при использовании обычного запроса во втором действии. Что-то в вопросе query.whereEqualsTo («отдел», отдел) отбрасывает все это.ListView исчезает при возврате к активности после нажатия кнопки «Вверх»
первая активность:
public class MainActivity extends ActionBarActivity {
private Button mMEButton;
private Button mCEButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMEButton = (Button)findViewById(R.id.meButton);
mCEButton = (Button)findViewById(R.id.ceButton);
mMEButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ProfessorsActivity.class);
intent.putExtra("department", "ME");
startActivity(intent);
}
});
mCEButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ProfessorsActivity.class);
intent.putExtra("department", "CE");
startActivity(intent);
}
});
}
второй Активность:
public class ProfessorsActivity extends ActionBarActivity {
private ParseQueryAdapter<ParseObject> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_professors);
Intent intent = getIntent();
final String department = intent.getStringExtra("department");
ParseQueryAdapter.QueryFactory<ParseObject> factory =
new ParseQueryAdapter.QueryFactory<ParseObject>() {
public ParseQuery create() {
ParseQuery query = new ParseQuery("Professor");
query.whereEqualTo("department", department);
return query;
}
};
adapter = new ParseQueryAdapter<ParseObject>(this, factory) {
@Override
public View getItemView(ParseObject professor, View v, ViewGroup parent) {
if (v == null) {
v = View.inflate(getContext(), R.layout.professor_item, null);
}
TextView contentView = (TextView) v.findViewById(R.id.professorNameTextView);
contentView.setText(professor.getString("lastName") + ", " + professor.getString("firstName"));
return v;
}
};
//adapter.setTextKey("lastName");
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final ParseObject tappedProfessor = adapter.getItem(position);
String professorId = tappedProfessor.getObjectId();
Intent intent = new Intent(ProfessorsActivity.this, OfficeHoursActivity.class);
intent.putExtra("professorId", professorId);
startActivity(intent);
}
});
}
третья активность:
public class OfficeHoursActivity extends ActionBarActivity {
private TextView mNameTextView;
private TextView mTimeTextView1;
private TextView mDaysTextView1;
private TextView mTimeTextView2;
private TextView mDaysTextView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_office_hours);
Intent intent = getIntent();
String professorId = intent.getStringExtra("professorId");
mNameTextView = (TextView) findViewById(R.id.professorName);
mTimeTextView1 = (TextView) findViewById(R.id.officeHourTime1);
mDaysTextView1 = (TextView) findViewById(R.id.officeHourDays1);
mTimeTextView2 = (TextView) findViewById(R.id.officeHourTime2);
mDaysTextView2 = (TextView) findViewById(R.id.officeHourDays2);
mNameTextView.setVisibility(INVISIBLE);
mTimeTextView1.setVisibility(INVISIBLE);
mDaysTextView1.setVisibility(INVISIBLE);
mTimeTextView2.setVisibility(INVISIBLE);
mDaysTextView2.setVisibility(INVISIBLE);
ParseQuery<ParseObject> query = ParseQuery.getQuery("Professor");
// Retrieve the object by id
query.getInBackground(professorId, new GetCallback<ParseObject>() {
public void done(ParseObject currentProfessor, ParseException e) {
if (e == null) {
mNameTextView.setText(currentProfessor.getString("lastName") + ", " + currentProfessor.getString("firstName"));
mTimeTextView1.setText(currentProfessor.getString("start1") + " - " + currentProfessor.getString("end1"));
mDaysTextView1.setText(currentProfessor.getString("days1"));
mNameTextView.setVisibility(VISIBLE);
mTimeTextView1.setVisibility(VISIBLE);
mDaysTextView1.setVisibility(VISIBLE);
if (currentProfessor.getString("start2") != null) {
mTimeTextView2.setText(currentProfessor.getString("start2") + " - " + currentProfessor.getString("end2"));
mDaysTextView2.setText(currentProfessor.getString("days2"));
mTimeTextView2.setVisibility(VISIBLE);
mDaysTextView2.setVisibility(VISIBLE);
}
} else {
//something went wrong
}
}
});
Поместите свой код ListView в onresume method.SO, чтобы вернуться из последнего действия в свою активность listview, вы можете снова получить свои данные в своем списке! – Hardy