我有片段的真正麻烦!我有一个结果活动类,运行两个片段,下半部分地图与位置和近谷地方标记,上半部分(或我也想要它,但它不会红润工作)保持地址和细节也是用户选择标记。我得到了一切,我可以选择标记!我可以加载我的位置,我可以得到最近的地方,我甚至可以将地方细节运行到另一个片段(但它加载屏幕)。但你认为我可以将细节加载到屏幕的上半部分!! (不!)我需要帮助,我几乎一直在摸不着头...... 20到2,我不能面对另一天......我知道它的东西很小(总是在我问的时候在堆栈上)但我不能发现它。你能帮帮我吗! 包含fragment,map_fragment,left search_frag for dynamic
的xml代码 <RelativeLayout
android:id="@+id/search_frag"
android:layout_width="match_parent"
android:layout_height="@dimen/results"
android:background="@color/cream"
android:layout_below="@+id/top_banner"
android:orientation="horizontal"
tools:layout="@layout/result_hint">
</RelativeLayout>
<fragment
android:layout_below="@id/search_frag"
android:id="@+id/map_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cream"
android:orientation="horizontal"
android:name="boo.thefoodhunt.fragment.MapFragment"
tools:layout="@layout/template_map_view"/>
ResultsActivitiy.java:我在那里放了一个虚拟片段以查看它是否会加载它确实如此,认为用新片段替换它可能更容易(不是)
public class ResultsActivity extends FragmentActivity
implements MapFragment.MarkerClickCB {
//Log
private final String TAG = this.getClass().getName();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results);
//Master data list Fragment
FragmentManager fm = getSupportFragmentManager();
SelectFrag firstFragment = new SelectFrag();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.search_frag, firstFragment);
ft.commit();
}
MapFragment.java 公共布尔值onMarkerClick(标记标记)上的else if语句的一部分。未注释的代码可以工作并传达用户选择的地址详细信息,并将详细信息发送到全屏片段。
if (marker.equals(this.myLocMarker) && nearby != null) {
for (Marker placeMarker : nearby.keySet()) {
placeMarker.setVisible(!placeMarker.isVisible());
}
} else if (nearby != null && nearby.containsKey(googLocation)) {
Intent intent = new Intent(getActivity(), TempPlaceActivity.class);
intent.putExtra("PLACE", nearby.get(googLocation));
startActivity(intent);
// mCallbacks.onMarkerSelected("PLACE", nearby);
return true;
代码有点吵了我很抱歉我不想发布它,因为有大约5种不同的java.classes ...只是在正确的方向上的一点将是太棒了。 ResultsActivity.java包含2个片段并具有results.xml。 MapFragment.java保存地图,谷歌地方详细信息位于frame.xml中。 PlacesDetailsFragments保存详细信息并保存在places.xml文件中。每个片段都有活动,它们似乎都是一对的......我今晚放弃任何帮助都将受到赞赏!
答案 0 :(得分:0)
我把它解决了,并认为id分享。好的,片段是用xml布局编写的,就像这样......
<RelativeLayout
android:id="@+id/search_frag"
android:layout_width="match_parent"
android:layout_height="@dimen/results"
android:layout_below="@+id/top_banner"
android:background="@color/cream"
android:orientation="horizontal"
tools:layout="@layout/result_hint"></RelativeLayout>
<RelativeLayout
android:id="@+id/map_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/search_frag"
android:background="@color/cream"
android:orientation="horizontal"
tools:layout="@layout/template_map_view" />
search_frag和map_fragment需要为RelativeLayout,因为它将在您希望它们出现的活动中编程
ACTIVITY CLASS search_frag
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results);
setUpMapIfNeeded();
....
//sets up default fragment, will later be replaced with fragment when marker is selected
if (findViewById(R.id.fragment_container) == null) {
if (savedInstanceState != null) {
return;
}
FragmentManager fm = getSupportFragmentManager();
SelectFrag firstFragment = new SelectFrag();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.search_frag, firstFragment);
ft.commit();
}
...
<强> map_frag 强>
private void setUpMapIfNeeded() {
if (mMap != null) {
return;
}
mMap = new MapFragment();
mMap.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction()
.add(R.id.map_fragment, mMap).commit();
}
MAP FRAGMENT
MarkerClickCB mCallbacks; //communicates with the activity
//interface set up
public interface MarkerClickCB {
void onMarkerSelected(String place, GoogePlaces place1);
}
....
mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (!mClusterManager.onMarkerClick(marker)) {
googLocation = marker;
cluster.getPosition();
if (googLocation.equals(userLocMarker) && clusts2 == null) {
searchFilter();
}
if (marker.equals(userLocMarker) && nearby != null) {
for (Marker placeMarker : nearby.keySet()) {
placeMarker.setVisible(!placeMarker.isVisible());
}
} else if (cluster != null) {
mCallbacks.onMarkerSelected("PLACE", clickedClusterItem.getPlace());
getDistance(clickedClusterItem.getPosition().latitude, clickedClusterItem.getPosition().longitude);
return true;
}
}
return false;
}
});
..现在回到包含以前编程的片段的活动类。我们需要将search_frag替换为包含所选标记的Google地方信息的新片段。
活动类需要为地图片段
中的数据通信实现回调数据返回活动类
public class ResultsActivity extends AppCompatActivity
implements MapFragment.MarkerClickCB
....
//previous fragment info//
...
public void onMarkerSelected(String near, GoogePlaces googPlace) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
PlaceFragment fragment = PlaceFragment.newInstance(googPlace);
ft.replace(R.id.search_frag, fragment);
ft.commit();
}
..保存数据的替换片段 PLACE FRAGMENT
final static String PLACES_ID = "GoogePlaces";
//Creates fragment object with details
public static PlaceFragment newInstance(GoogePlaces place) {
PlaceFragment fragment = new PlaceFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(PLACES_ID, place);
fragment.setArguments(bundle);
return fragment;
}
//this bit got a bit messy for me - welcome to comment with improvements
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
place = (GoogePlaces) getArguments().getSerializable(PLACES_ID);
View view = inflater.inflate(R.layout.activity_place_detail, container, false);
this.context = getActivity().getApplicationContext();
Log.i("PLACE EXAMPLE", "Place Detail Activity");
place = (GoogePlaces) getArguments().getSerializable(PLACES_ID);
...
getActivity().setTitle(place.getName());
String placesKey = getResources().getString(R.string.places_key);
//connect to google places - to gather eatery details
String placesRequest = "https://maps.googleapis.com/maps/api/place/details/json?" +
"key=" + placesKey + "&reference=" + place.getReference();
PlacesDetailReadFeed detailTask = new PlacesDetailReadFeed();
detailTask.execute(new String[]{placesRequest});
......
return view;
}
好吧,作为一个新手(ish)程序员,这对我来说非常困难,我必须承认,任何指针,对代码清理的批评都将受到赞赏