Android Studio-TabHost刷新标签内容 [英] Android Studio - TabHost refresh tab content
问题描述
请帮助我..
好的,这是我的问题.我使用tabhost,并且有3个标签.
ok here is my problem. i use tabhost and i have 3 tabs.
由歌曲列表,新歌曲和收藏夹组成
compose of SONG LIST, NEW SONGS and FAVORITES
这是Tabhost的代码.
here is the code of the tabhost..
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_fragment_one, container, false);
final TabHost host = (TabHost) rootView.findViewById(R.id.tabHost);
host.setup();
dbHelper = new FragmentOne_DbAdapter(getActivity());
dbHelper.open();
//Clean all data
//dbHelper.deleteAllPlayer1();
//Add some data
dbHelper.insertPlayer1Songlist();
//Generate ListView from SQLite Database
//Tab 1
TabHost.TabSpec spec = host.newTabSpec("SONG LIST");
spec.setContent(R.id.tab1);
spec.setIndicator("SONG LIST");
host.addTab(spec);
listView = (ListView) rootView.findViewById(R.id.slPlayer1ListView);
player1ESearch = (EditText) rootView.findViewById(R.id.player1Search);
ImageButton dplayer1ESearch=(ImageButton) rootView.findViewById(R.id.delete);
dplayer1ESearch.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
player1ESearch.setText("");
}
});
displayPlayer1ListView();
//Tab 2
spec = host.newTabSpec("NEW SONGS");
spec.setContent(R.id.tab2);
spec.setIndicator("NEW SONGS");
host.addTab(spec);
listViewNew = (ListView) rootView.findViewById(R.id.slPlayer1NewListView);
displayPlayer1NewListView();
//Tab 3
spec = host.newTabSpec("FAVORITES");
spec.setContent(R.id.tab3);
spec.setIndicator("FAVORITES");
host.addTab(spec);
return rootView;
}
在我的标签歌曲列表中,我显示数据库列表并将其设置为适配器.
in my tab SONG LIST, i display list from database and set it to adapter..
在这部分代码中.
private void displayPlayer1ListView() {
Cursor cursor = dbHelper.fetchAllPlayer1();
FragmentOneAdapter = new FragmentOne_Adapter(getActivity(), cursor, 0);
listView.setAdapter(FragmentOneAdapter);
player1ESearch.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
FragmentOneAdapter.getFilter().filter(s.toString());
}
});
FragmentOneAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return dbHelper.fetchPlayer1ByTitle(constraint.toString());
}
});
}
这是我的适配器绑定视图.
and here is my adapter bindview..
@Override
public void bindView(View view, final Context context, final Cursor cursor) {
// TODO Auto-generated method stub
final ViewHolder holder = (ViewHolder) view.getTag();
final int _id = cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
String title = cursor.getString(cursor.getColumnIndexOrThrow("title"));
String artist = cursor.getString(cursor.getColumnIndexOrThrow("artist"));
String volume = cursor.getString(cursor.getColumnIndexOrThrow("volume"));
String type = cursor.getString(cursor.getColumnIndexOrThrow("type"));
final String favorite = cursor.getString(cursor.getColumnIndexOrThrow("favorite"));
String number = cursor.getString(cursor.getColumnIndexOrThrow("number"));
// Populate fields with extracted properties
holder.txtTitle.setText(title);
holder.txtArtist.setText(artist);
holder.txtVolume.setText(volume);
holder.txtNumber.setText(number);
if (type.matches("1")) {
holder.buttonType.setImageResource(R.drawable.newsong);
} else if (type.matches("2")) {
holder.buttonType.setImageResource(R.drawable.practice);
} else if (type.matches("0")) {
holder.buttonType.setImageResource(R.drawable.none);
}
if (favorite.matches("0")) {
holder.buttonHeart.setImageResource(R.drawable.heart);
} else {
if (favorite.matches("1")) {
holder.buttonHeart.setImageResource(R.drawable.heartred);
} else {
holder.buttonHeart.setImageResource(R.drawable.heart);
}
}
holder.buttonHeart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (arg0 != null) {
FragmentOne_DbAdapter database = new FragmentOne_DbAdapter(context);
database.open();
if (favorite.matches("0")) {
database.updateItemFavorite(_id, "1");
holder.buttonHeart.setImageResource(R.drawable.heartred);
} else if (favorite.matches("1")) {
database.updateItemFavorite(_id, "0");
holder.buttonHeart.setImageResource(R.drawable.heart);
}
}
FragmentOne_Adapter.this.changeCursor(dbHelper.fetchAllPlayer1());
}
});
}
正如您在适配器中看到的那样,我有 database.updateItemFavorite ,在这一部分中,这是我更新数据库中的字段(如果喜欢的话)的位置,它将设置为1,而imageview资源将为心动的.
as you can see in my adapter i have database.updateItemFavorite, in this part, this is where i update field in database if it is favorite it will set to 1 and the imageview resource will be heartred.
现在我的第二个是新歌
在第二个选项卡中,我在代码的这一部分显示新歌曲.
in the second tab i display new songs in this part of the code..
private void displayPlayer1NewListView() {
Cursor cursor = dbHelper.fetchAllPlayer1New();
FragmentOneAdapterNew = new FragmentOne_AdapterNew(getActivity(), cursor, 0);
listViewNew.setAdapter(FragmentOneAdapterNew);
}
这是我的新歌的bindview..
here is the bindview for my new song..
@Override
public void bindView(View view, final Context context, final Cursor cursor) {
// TODO Auto-generated method stub
final ViewHolder holder = (ViewHolder) view.getTag();
final int _id = cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
String title = cursor.getString(cursor.getColumnIndexOrThrow("title"));
String artist = cursor.getString(cursor.getColumnIndexOrThrow("artist"));
String volume = cursor.getString(cursor.getColumnIndexOrThrow("volume"));
String type = cursor.getString(cursor.getColumnIndexOrThrow("type"));
final String favorite = cursor.getString(cursor.getColumnIndexOrThrow("favorite"));
String number = cursor.getString(cursor.getColumnIndexOrThrow("number"));
// Populate fields with extracted properties
holder.txtTitle.setText(title);
holder.txtArtist.setText(artist);
holder.txtVolume.setText(volume);
holder.txtNumber.setText(number);
if (type.matches("1")) {
holder.buttonType.setImageResource(R.drawable.newsong);
} else if (type.matches("2")) {
holder.buttonType.setImageResource(R.drawable.practice);
} else if (type.matches("0")) {
holder.buttonType.setImageResource(R.drawable.none);
}
if (favorite.matches("0")) {
holder.buttonHeart.setImageResource(R.drawable.heart);
} else {
if (favorite.matches("1")) {
holder.buttonHeart.setImageResource(R.drawable.heartred);
} else {
holder.buttonHeart.setImageResource(R.drawable.heart);
}
}
holder.buttonHeart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (arg0 != null) {
FragmentOne_DbAdapter database = new FragmentOne_DbAdapter(context);
database.open();
if (favorite.matches("0")) {
database.updateItemFavorite(_id, "1");
holder.buttonHeart.setImageResource(R.drawable.heartred);
} else if (favorite.matches("1")) {
database.updateItemFavorite(_id, "0");
holder.buttonHeart.setImageResource(R.drawable.heart);
}
}
FragmentOne_AdapterNew.this.changeCursor(dbHelper.fetchAllPlayer1New());
}
});
}
单击我的收藏夹图像按钮后,在我的歌曲列表中
.它将我最喜欢的字段更新为1,并将资源设置为可喜.
in my SONG LIST, after i click favorite imagebutton. it update my favorite field to 1 and set resource to heartred.
现在我的问题是当我单击选项卡新歌曲"时.从歌曲列表中更新的收藏夹也应该出现在我的新歌曲列表中.
now my problem is when i click the tab NEW SONGS. the updated favorite from SONG LIST should also appear in my NEW SONGS list.
请帮助我.
推荐答案
对于那些遇到这个问题的人..我找到了答案..
for those who encounter this problem.. i found an answer..
host.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
int i = host.getCurrentTab();
if (i == 0) {
displayPlayer1ListView();
} else if (i == 1) {
displayPlayer1NewListView();
}
}
});
这篇关于Android Studio-TabHost刷新标签内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!