Android 单击“向上”按钮后返回“活动”时,ListView将消失
我正在使用Parse.com在我的应用程序的第二个活动中填充ListView。单击ListView中的项目将打开第三个活动。问题是,当使用“向上”按钮返回第二个活动时,ListView消失了。由于某些原因,使用“后退”按钮时不会发生此行为。此外,在第二个活动中仅使用普通查询时也不会发生这种情况。关于这个查询。whereEqualsTodepartment,department line正在处理整个问题 第一项活动:Android 单击“向上”按钮后返回“活动”时,ListView将消失,android,listview,parse-platform,Android,Listview,Parse Platform,我正在使用Parse.com在我的应用程序的第二个活动中填充ListView。单击ListView中的项目将打开第三个活动。问题是,当使用“向上”按钮返回第二个活动时,ListView消失了。由于某些原因,使用“后退”按钮时不会发生此行为。此外,在第二个活动中仅使用普通查询时也不会发生这种情况。关于这个查询。whereEqualsTodepartment,department line正在处理整个问题 第一项活动: public class MainActivity extends Action
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
}
}
});
第二项活动:
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
}
}
});
第三项活动:
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
}
}
});
默认情况下,“向上”按钮创建父活动的新实例。 如果希望它像“后退”按钮一样工作,只需覆盖OfficeHoursActivity中的OnOptions ItemSelected并执行以下操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
现在检查。。也许你的问题会解决的 我通过将以下标记添加到AndroidManifest.xml文件中的第二个活动中,解决了这个问题
android:launchMode="singleTop"
这将防止单击“向上”按钮时重新创建活动。将Listview代码放入onresume方法中。这样,从上一个活动返回到Listview活动时,您就可以将数据再次输入Listview了,谢谢!这是另一个有效的答案。我更改了第二个活动,使其具有onNewIntent方法。单顶启动模式不再足以维护列表。此代码允许我使用onNewIntent方法并在活动中维护列表。