Tab-Host を Android に統合しようとしています
- logcatに投稿したようにエラーが発生しています
- これを克服する方法についてのアイデア
- JSON 応答などは、タブホストがなくても問題なく動作するため、まったく問題ありませんが、以下のタブホストを扇動したため、エラーが発生しています
AndroidTabAndListView.java
public class AndroidTabAndListView extends TabActivity {
// TabSpec Names
private static final String INBOX_SPEC = "Inbox";
private static final String OUTBOX_SPEC = "Outbox";
private static final String PROFILE_SPEC = "Profile";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost();
// Inbox Tab
TabSpec inboxSpec = tabHost.newTabSpec(INBOX_SPEC);
Intent inboxIntent = new Intent(this, MainActivity.class);
// Tab Content
inboxSpec.setContent(inboxIntent);
// Outbox Tab
TabSpec PriceSpec = tabHost.newTabSpec(OUTBOX_SPEC);
Intent PriceIntent = new Intent(this, PriceDescriptionActivity.class);
PriceSpec.setContent(PriceIntent);
// Profile Tab
TabSpec DistanceSpec = tabHost.newTabSpec(PROFILE_SPEC);
Intent DistanceIntent = new Intent(this, DistanceDiscriptionActivity.class);
DistanceSpec.setContent(DistanceIntent);
// Adding all TabSpec to TabHost
tabHost.addTab(inboxSpec);
tabHost.addTab(PriceSpec);
tabHost.addTab(DistanceSpec);
}
}
MainActivity.java
public class MainActivity extends Activity {
// url to make request
private static String url = "http://54.218.73.244:7004/";
TextView timedisplay;
String item;
private HashMap<Integer, String> TimeMap = new HashMap<Integer, String>();
ListView yourListView;
List<Item> yourData = new ArrayList<Item>();
MyAdapter customAdapter;
ProgressDialog progressDialog;
String restaurant_name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timedisplay = (TextView) findViewById(R.id.RestaurantTimeID);
yourListView = (ListView) findViewById(R.id.listViewID);
// Instantiating ProgressDialog with onCreate method
progressDialog = new ProgressDialog(MainActivity.this);
new ParsingAsync().execute();
}
private class ParsingAsync extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(MainActivity.this, "",
"Please Wait", true, false);
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
String _response = null;
String _response1 = null;
try {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(
CoreProtocolPNames.PROTOCOL_VERSION,
HttpVersion.HTTP_1_1);
HttpGet request = new HttpGet(url);
HttpResponse response = httpclient.execute(request);
HttpEntity resEntity = response.getEntity();
_response = EntityUtils.toString(resEntity);
JSONObject jsonObject = new JSONObject(_response);
JSONArray first_array = jsonObject.getJSONArray("restaurants");
JSONArray second_array = jsonObject
.getJSONArray("RestaurantTimings");
for (int i = 0; i < first_array.length(); i++) {
JSONObject c = second_array.getJSONObject(i);
Item item = new Item();
// Storing each json item in variable
int id = c.getInt("_id");
String TIME = c.getString("RestaurantTime");
item.setTime(TIME);
c = first_array.getJSONObject(i);
String NAME = c.getString("restaurantNAME");
item.setName(NAME);
yourData.add(item);
}
HttpClient httpclient1 = new DefaultHttpClient();
httpclient.getParams().setParameter(
CoreProtocolPNames.PROTOCOL_VERSION,
HttpVersion.HTTP_1_1);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
progressDialog.dismiss();
customAdapter = new MyAdapter(MainActivity.this,
R.layout.itemlistrow, yourData);
yourListView.setAdapter(customAdapter);
yourListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
item = yourData.get(position).getName();
// String sendingurl="url1?param1=value1";
Intent i = new Intent(MainActivity.this,
RestaurantDesc.class);
i.putExtra("REST", item.toString());
// i.putExtra("key", yourData.get(position).getUrl());
//i.putExtra("CC_RES", item.toString());
startActivity(i);
}
});
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
</TabHost>
ログキャット::
09-18 15:37:50.366: D/AndroidRuntime(553): Shutting down VM
09-18 15:37:50.366: W/dalvikvm(553): threadid=1: thread exiting with uncaught exception (group=0x40015560)
09-18 15:37:50.385: E/AndroidRuntime(553): FATAL EXCEPTION: main
09-18 15:37:50.385: E/AndroidRuntime(553): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.project.findmybuffet/com.project.findmybuffet.AndroidTabAndListView}: java.lang.IllegalArgumentException: you must specify a way to create the tab indicator.
09-18 15:37:50.385: E/AndroidRuntime(553): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
09-18 15:37:50.385: E/AndroidRuntime(553): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-18 15:37:50.385: E/AndroidRuntime(553): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-18 15:37:50.385: E/AndroidRuntime(553): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-18 15:37:50.385: E/AndroidRuntime(553): at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 15:37:50.385: E/AndroidRuntime(553): at android.os.Looper.loop(Looper.java:123)
09-18 15:37:50.385: E/AndroidRuntime(553): at android.app.ActivityThread.main(ActivityThread.java:3683)
09-18 15:37:50.385: E/AndroidRuntime(553): at java.lang.reflect.Method.invokeNative(Native Method)
09-18 15:37:50.385: E/AndroidRuntime(553): at java.lang.reflect.Method.invoke(Method.java:507)
09-18 15:37:50.385: E/AndroidRuntime(553): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-18 15:37:50.385: E/AndroidRuntime(553): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-18 15:37:50.385: E/AndroidRuntime(553): at dalvik.system.NativeStart.main(Native Method)
09-18 15:37:50.385: E/AndroidRuntime(553): Caused by: java.lang.IllegalArgumentException: you must specify a way to create the tab indicator.
09-18 15:37:50.385: E/AndroidRuntime(553): at android.widget.TabHost.addTab(TabHost.java:198)
09-18 15:37:50.385: E/AndroidRuntime(553): at com.project.findmybuffet.AndroidTabAndListView.onCreate(AndroidTabAndListView.java:40)
09-18 15:37:50.385: E/AndroidRuntime(553): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-18 15:37:50.385: E/AndroidRuntime(553): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09-18 15:37:50.385: E/AndroidRuntime(553): ... 11 more
エラーから「タブインジケーターの作成方法を指定する必要があります」とありますが…どうすれば解決できますか