我有一个主/详细布局的应用程序(1个活动,1个ListView片段和1个细节片段).当用户单击ListView中的项目时,片段事务会在右窗格中实例化一个详细信息片段,其中包含与该项目对应的信息.当显示细节片段时,我隐藏了初始操作栏按钮/项目并显示3个新的AB项目(完成/删除/取消).用户可以通过按后退按钮或按下3 AB项中的一个来清理右窗格并返回初始UI状态.
我遇到的问题是,当用户选择应用程序的主页图标(即"向上导航")时,活动会重新加载(即表示活动正在启动的动画可以被视为操作栏和UI已被重绘).只有在按下应用程序主页图标时才会出现此问题.如果用户按下后退按钮或取消/完成/删除操作栏按钮,则只需从右窗格中删除片段,UI将返回初始状态而不会"重新加载".
活动的XML布局如下(在LinearLayout内部;美化隐藏该行):
<fragment class="*.*.*.ListFragment"
android:id="@+id/titles" android:layout_weight="1"
android:layout_width="0px"
android:layout_height="match_parent" />
<FrameLayout android:id="@+id/details" android:layout_weight="2"
android:layout_width="0px"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
DetailsFragement在其onCreate方法中具有actionBar.setDisplayHomeAsUpEnabled语句:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
ActionBar actionBar = getSherlockActivity().getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
对于ListView片段和Detail片段,onCreateOptionsMenu()和onOptionsItemSelected()方法都在片段中实现.在Details片段的代码下面:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.edit_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// some variable statements...
switch (item.getItemId()) {
case android.R.id.home:
//Toast.makeText(getSherlockActivity(), "Tapped home", Toast.LENGTH_SHORT).show();
onHomeSelectedListener.onHomeSelected();
return true;
case R.id.menu_edit_item_done:
editedTask.setTitle(editedTaskTitle);
onTaskEditedListener.onTaskEdited(editedTask, UPDATE_TASK, true);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
在主机活动中,我实现了onHomeSelectedListner来处理app …
我正在尝试重构我的代码以使用Retrofit(来自Volley)进行一些Foursquare API调用,但是没有找到一个正确的示例来说明如何指定具有由逗号分隔的2个值的查询参数.
我的基本网址如下:
public static final String VENUES_BASE_URL = "https://api.foursquare.com/v2/venues";
Run Code Online (Sandbox Code Playgroud)
我的其余网址是这样的:
"?ll=40.7,50.2&limit=50&radius=25000&v=20140909&venuePhotos=1&oauth_token=xxyyxx";
Run Code Online (Sandbox Code Playgroud)
我的界面的第一个实现:
public interface Fourquare {
@GET("/explore?ll={p1},{p2}&limit=50&radius=25000&v=20140905&venuePhotos=1&oauth_token=xxyyxx")
Response getVenues(@Path("p1") String param1,
@Path("p2") String param2);
}
Run Code Online (Sandbox Code Playgroud)
然后提出这样的请求:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(ConfigConstants.VENUES_BASE_URL)
.build();
Fourquare fourquare = restAdapter.create(Fourquare.class);
Response myResponse = fourquare.getVenues("50", "75");
Run Code Online (Sandbox Code Playgroud)
但是,上面给了我以下错误:
retrofit.RetrofitError: Fourquare.getVenues: URL query string "ll={p1},{p2}&limit=50&radius=25000&v=20140905&venuePhotos=1&oauth_token=xxyyxx" must not have replace block.
Run Code Online (Sandbox Code Playgroud)
第二个实现(在查看一些使用Query参数的SO响应之后.注意:一旦我找到了ll?参数调用,我将把令牌作为参数):
@GET("/explore&limit=50&radius=25000&v=20140905&venuePhotos=1&oauth_token=xxyyxx")
void getVenues(@Query("ll") String ll,
Callback<String> cb);
Run Code Online (Sandbox Code Playgroud)
通过这样的实际调用:
fourquare.getVenues("50,75", new Callback<String>() {
@Override
public void success(String s, Response response) {
Log.d(TAG, "Successful run!"); …Run Code Online (Sandbox Code Playgroud) 我为我的Android应用程序制作了一个自定义listView,我在为项目的不同部分创建单独的onClickListener时遇到问题.我的项目有图片和文字.我想要的是根据点击的那些开始不同的活动.
onClick()方法应该启动一个活动,这使我无法在我的DataBinder类的getView()方法中定义.(DataBinder使用自定义布局填充我的listView)
有帮助吗?
谢谢!