Witam, dodałem dwa TabHost
s w Activity
i działa grzywna. Dodałem kolejny plik XML z ListView
i wywołałem w Activity
, gdzie używam Tabhost
. Podaje błąd zgodnie z oczekiwaniami, ale wiele próbowałem, ale nie mogłem go rozwiązać. Czy ktoś może mi dać jakiś pomysł na temat zarządzania ListView
i TabHost
zarówno w jednym Activity
? Nie wstawiłem kodu, ponieważ jest to głównie z samouczków. Każda pomoc będzie doceniona. Dzięki. poważny błąd jest „treść musi mieć TabHost
którego atrybut id jest«android.R.id.tabhost»”Widok listy po stronie rufowej i tabhost po prawej stronie z proporcją ekranu 20:80
5
A
Odpowiedz
0
Próbka aktywny z kartami i ListViews z zaznaczonych elementów:
Zamieściłem poniżej przykładowa aktywność zawierająca jeden TabHost
, który ma 3 Tabs
i dwa ListView
, po jednym na każdy tab1
i tab3
. Używam ArrayList
, aby zainicjować mój ArrayAdapter
, z którego mogę połączyć mój ListView
. Następnie dodaje elementy do tab3ListView
po skonfigurowaniu poprzez jego ArrayList
, tab3List
. Zwróć uwagę, że elementy tab3ListView mają odpowiednie pole wyboru. Zauważ, że w dzisiejszych czasach niektórzy ludzie wolą ActionBar.Tabs
niż TabHost
, ale uważam, że jest to prostsze.
XML FILE:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabHost
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="5dp" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="70dp"
android:layout_marginBottom="-4dp"
android:layout_weight="0" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0dp"
android:layout_weight="1">
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/tab1List"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fastScrollEnabled="true"></ListView>
</LinearLayout>
<LinearLayout
android:id="@+id/tab2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/tab2Edit1"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:hint="Enter text here"/>
</LinearLayout>
<LinearLayout
android:id="@+id/tab3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ListView
android:id="@+id/tab3List"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fastScrollEnabled="true"></ListView>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
Główna działalność:
public class MainActivity extends Activity{
// TabHost
TabHost th;
LinearLayout tab1, tab2, tab3;
// ListView
ListView tab1ListView, tab3ListView;
// String list
String stringList[] = {"Paris", "Washington", "Amsterdam", "London", "Bale", "Madrid",
"Zurich", "Munich", "Berlin", "Milan", "Rome", "Turin", "Lyon", "Marseille"};
// Adapters
ArrayList<String> tab1List, tab3List;
ArrayAdapter<String> tab1Adapter, tab3Adapter;
// Others
EditText tab2Edit1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Initialize Layout
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Initialize Tabs
th = (TabHost) findViewById(R.id.tabhost);
th.setup();
// Tab1
TabSpec spec1 = th.newTabSpec("tag1");
spec1.setContent(R.id.tab1);
spec1.setIndicator("Tab 1");
th.addTab(spec1);
// Tab2
TabSpec spec2 = th.newTabSpec("tag2");
spec2.setContent(R.id.tab2);
spec2.setIndicator("Tab 2");
th.addTab(spec2);
// Tab3
TabSpec spec3 = th.newTabSpec("tag3");
spec3.setContent(R.id.tab3);
spec3.setIndicator("Tab 3");
th.addTab(spec3);
//Initialize Adapter and ListView from Tab1
tab1ListView = (ListView) findViewById(R.id.tab1List);
tab2Edit1 = (EditText) findViewById(R.id.tab2Edit1);
tab1List = new ArrayList<String>(Arrays.asList(stringList));
tab1Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tab1List);
tab1ListView.setAdapter(tab1Adapter);
//Initialize Adapter and ListView from Tab3
tab3ListView = (ListView) findViewById(R.id.tab3List);
tab3List = new ArrayList<String>(Arrays.asList(stringList));
tab3Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, tab3List);
tab3ListView.setAdapter(tab3Adapter);
tab3ListView.setFocusable(false);
tab3ListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
// Modify ListView: modify ArrayList and call notifyDataSetChanged() from corresponding adapter
tab3List.add(0,"New item at location 0");
tab3List.add(3,"New item at location 3");
tab3List.add("New item at location end");
tab3Adapter.notifyDataSetChanged();
tab3ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// Set what happenss when you check or uncheck an item here
}
});
}
tak, sama błędu tłumacząc, że musi mieć tabhost id "tabhost". Jeśli podałeś identyfikator diff w pliku układu, ulegnie on awarii. – akkilis
Tak, że zrozumiałem, i umieścić identyfikator w ten sposób, mam nadzieję, że poprawiam Androida: id = "@ android: id/tabhost" –