我正在使用ToolBar Spinner在我的应用程序的6个活动之间切换。我称之为MainView的开放活动只有微调器[加上ToolBar操作菜单上的帮助链接]。用户从微调器中选择他希望运行的其他5个活动中的哪一个,并在完成后使用该活动的ToolBar后退按钮返回到MainView。
一切正常,除了从任何其他活动返回MainView后,该活动的名称仍然显示在Spinner中,而不是我预期的MainView。另外,如果用户想要返回相同的活动,他必须先选择其他活动。
我原以为当App使用ToolBar后退按钮返回MainView时,它会通过调用MainView OnCreate来实现,并且会重新创建MainView微调器,从而显示MainView。但事实并非如此。
我在onCreate中尝试过一些事情,包括setSelection(0),重新初始化onStart和onResume中的微调器 - 但没有一个有所作为。希望你能帮忙。
xml for spinner ...
<Spinner
android:id="@+id/spinner_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
微调器的初始化代码
String[] mainview_names = new String[]
{"MainView", "WebView", "JsoupView", "CodeView", "Connectivity", "FtpView"};
Spinner mainSpinner = (Spinner) findViewById(R.id.spinner_main);
ArrayAdapter<String> adapter = new ArrayAdapter<>
(this,android.R.layout.simple_spinner_dropdown_item, mainview_names);
mainSpinner.setAdapter(adapter);
mainSpinner.setOnItemSelectedListener(new CustomOnItemSelectedListener());
// mainSpinner.setSelection(0);
听众......
public class CustomOnItemSelectedListener implements AdapterView.OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
switch (pos){
case 0: // Main View
break;
case 1: // Web View
BrowseWWW();
break;
case 2: // Jsoup View
LoadHTMLJsoup();
break;
case 3: // Code View
LoadHTMLCode();
break;
case 4: // Connectivity
GetHTMLConn();
break;
case 5: // Ftp View
GetHTMLFtp();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
}
编辑:补充信息:
5个活动每个响应后退按钮,代码结构如下。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
help.setVisibility(View.GONE);
switch (item.getItemId()){
case android.R.id.home: // up navigation
finish();
return true;
case R.id.load:
// ....
}
return true;
case R.id.Clear
// ...
return true;
}
return false;
}
@Override
public void finish() {
Intent i = new Intent();
i.putExtra("urlKey", url.getText().toString());
i.putExtra("tokenKey", token.getText().toString());
i.putExtra("redirectsKey", HttpURLConnection.getFollowRedirects());
setResult(RESULT_OK, i);
super.finish();
}
答案 0 :(得分:1)
好的旋转器状态问题:
没有深入研究更多代码,这是我的理论:
您正在参与活动A
。你在微调器中选择一些东西,比如说B
。现在,您处于活动状态B
,活动A
暂停保留状态 - 即它具有与在微调器中选择的B
对应的项目。当您从B
返回时,活动A
将恢复到该确切状态,当然,仍然在微调器中有B
项。您无法立即再次转到B
,因为如果您重新选择B
,则不会调用您的选择处理程序(因为没有更改)。
Activity
每次都没有被破坏的事实可能是你欺骗的原因,这就是为什么你应该看看谷歌guide on Activities - 它可能会为你节省大量的猜测时间:)
因此,要使用微调器解决您的问题,您应该覆盖每个活动的onResume()
方法,并使用它将微调器设置为与该活动相对应的状态 - 这是短版本。
很长的版本是,你可能会使用工具栏微调器在活动之间进行导航来对抗流。
导航可以更快,更直观地将您的Web,Jsoup,代码和其他顶级视图实现为Fragments(另外,this)在一个Activity
内,这正是他们的目的是什么。使用Tabs代替Spinner
可能会更加用户友好。