我构建我的第一个应用程序,一切正常,直到我添加一个菜单(导航抽屉)我添加了菜单,现在我需要使用片段和嵌套片段为我的内容而不是片段活动。
有两个标签可在列表和地图视图之间切换。 在它下面我需要3个按钮来选择显示的内容,例如所有警报,只有1级警报或只有2级警报。
主要活动布局:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fr_content_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<ListView
android:id="@+id/lv_menu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="left">
</ListView>
</android.support.v4.widget.DrawerLayout>
Fragment_main布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="aaeu.app.presentationlayer.MainFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="450dp">
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/tabhost">
<LinearLayout
android:id="@+id/LinearLayout01"
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
</FrameLayout>
</TabWidget>
</LinearLayout>
</TabHost>
</LinearLayout>
<LinearLayout
android:weightSum="3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="450dp">
<Button
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/all_alerts"
android:id="@+id/btn_all_alerts"/>
<Button
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/amber_alerts"
android:id="@+id/btn_ambert_alerts"/>
<Button
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/endangered_missings"
android:id="@+id/btn_missings"/>
</LinearLayout>
</FrameLayout>
主要片段代码:
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;
import aaeu.app.R;
public class MainFragment extends Fragment {
private TabHost mTabHost;
public MainFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_main, container, false);
mTabHost = (TabHost)v.findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"),
AlertOverviewMapsFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"),
AlertOverviewListFragment.class, null);
return v;
}
}
列出片段布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".presentationlayer.AlertOverviewListFragment">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv_alert_overview"></ListView>
</FrameLayout>
列出片段代码:
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import aaeu.app.R;
import aaeu.app.businesslayer.AppManager;
import aaeu.app.datalayer.Alert;
import aaeu.app.datalayer.e_Alerts;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnItemClick;
public class AlertOverviewListFragment extends Fragment implements e_Alerts {
@Bind(R.id.lv_alert_overview) ListView lv_alert_overview;
List<Alert> alerts = new ArrayList<Alert>();
AppManager manager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Load alerts when fragment starts
manager = new AppManager();
final WeakReference<e_Alerts> wr = new WeakReference<e_Alerts>(this);
this.alerts = manager.getAlerts(wr, this.getContext());
}
// Updates the list after asynctask is ready
@Override
public void UpdateAlerts(List<Alert> alerts)
{
//Fill array adapter with alerts from datalayer and set adapter for the listview
this.alerts = alerts;
updateList();
}
我一直得到错误: 错误:(39,17)错误:类TabHost中的方法addTab无法应用于给定类型; 必需:TabHost.TabSpec 发现:TabHost.TabSpec,Class, 原因:实际和正式的参数列表长度不同
我知道这不是关于这个问题的第一个话题/问题我读了很多问题。我从其中一个人那里得到了这个解决方案,但我无法让它发挥作用。
我认为这与import android.app.Fragment;
和import android.support.v4.app.Fragment;
有关,但我不确定。我只需要API17和更新版本的支持,所以我不需要支持库。
有人可以解释一下我做错了什么吗?我更喜欢一个解决方案,我不需要更改我的整个应用程序或编辑所有类/片段或其他东西。
---------------- UPDATE ----------------
何时使用:
// Tab for Listview
TabHost.TabSpec listspec = mTabHost.newTabSpec("Listview");
// setting Title for the Tab
listspec.setIndicator("Listview");
Intent listIntent = new Intent(getContext(), AlertOverviewListFragment.class);
listspec.setContent(listIntent);
mTabHost.addTab(listspec);
而不是:
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"),
AlertOverviewListFragment.class, null);
我收到了错误
Unable to start activity ComponentInfo{aaeu.app/aaeu.app.presentationlayer.MainActivity}: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?