У меня есть поддержка Action Bar
с двумя Tabs
, на одной вкладке отображаются последние видеоклипы, а другая вкладка - функция поиска, чтобы найти видеоклипы. Я новичок в Fragments, и то, что я не могу найти, это заменить Search и Recent Fragments с фрагментом воспроизведения видео на элементе списка в главном контейнере Fragment. Вот контейнер активность:Как заменить один фрагмент на другой в элементе списка?
public class SearchInterface extends ActionBarActivity {
ActionBar bar_AB;
Tab tab1, tab2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
setContentView(R.layout.frag1_main6);
setupTabs();
}// --- END onCreate
private void setupTabs() {
bar_AB = getSupportActionBar();
bar_AB.setDisplayHomeAsUpEnabled(true);
bar_AB.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
tab1 = bar_AB
.newTab()
.setText("Recent")
.setTag(RECENT_TAB_TAG)
.setTabListener(
new SupportFragmentTabListener<SSIRecentFrag>(
R.id.frag6_main_FL, this, RECENT_TAB_TAG,
SSIRecentFrag.class));
bar_AB.addTab(tab1);
bar_AB.selectTab(tab1);
tab2 = bar_AB
.newTab()
.setText("Search")
.setTag(SEARCH_TAB_TAG)
.setTabListener(
new SupportFragmentTabListener<SSISearchFrag>(
R.id.frag6_main_FL, this, SEARCH_TAB_TAG,
SSISearchFrag.class));
bar_AB.addTab(tab2);
}
}
А вот контейнер XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frag6_main_FL"
android:layout_width="match_parent"
android:layout_height="match_parent" />
А потом новое и поиск фрагментированных деятельности и выглядеть следующим образом (это поисковая активность):
public class SSISearchFrag extends Fragment {
View searchRootView;
EditText searchbox_ET;
LinearLayout list_LL;
Button search_BTN;
DBAdapter dbHelper;
ListView s_LV;
Cursor getPathCursor;
String cursorSDFStr = null;
String cursorCalDateStr = null;
String cursorURLStr = null;
String cursorTitleStr = null;
String cursorVerseStr = null;
FragmentManager fragMan;
FragmentTransaction fragTrans;
Fragment searchListFrag;
SSIVideoFrag video_FRG;
final String SEARCH_TAB_TAG = "searchTag";
Fragment recentListFrag;
Callback fragBackPressed;
// --- Create the ROOT VIEW
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
searchRootView = inflater.inflate(R.layout.ssi_search_frag,
container, false);
searchbox_ET = (EditText) searchRootView
.findViewById(R.id.ssi_Search1_et1);
search_BTN = (Button) searchRootView
.findViewById(R.id.ssi_search_btn1);
list_LL = (LinearLayout) searchRootView
.findViewById(R.id.ssi_search_list_LL);
final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
// --- Button
search_BTN.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imm.hideSoftInputFromWindow(search_BTN.getWindowToken(), 0);
dbHelper = new DBAdapter(getActivity());
dbHelper.open();
String searchTermStr = searchbox_ET.getText().toString();
Cursor cursor = dbHelper.searchDB(searchTermStr);
if (cursor != null) {
String[] columns = new String[] { DBAdapter.KEY_TITLE,
DBAdapter.KEY_CAL_DATE, DBAdapter.KEY_PATH,
DBAdapter.KEY_SDF, DBAdapter.KEY_VERSE,
DBAdapter.KEY_KEYWORDS };
int[] to = new int[] { R.id.slp_title_tv, R.id.slp_date_tv,
R.id.slp_url_tv, R.id.slp_sdf_tv, R.id.slp_verse_tv,
R.id.slp_keywords_tv };
SimpleCursorAdapter dataAdapter = new SimpleCursorAdapter(
getActivity(), R.layout.slp_list_item, cursor, columns, to,
0);
s_LV = (ListView) searchRootView
.findViewById(R.id.ssisearch_list_lv);
s_LV.setEmptyView(searchRootView
.findViewById(R.id.ssiempty_list_tv));
s_LV.setAdapter(dataAdapter);
}
dbHelper.close();
//--- onClick
// --- pass to ListVideo
s_LV.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
getPathCursor = (Cursor) s_LV
.getItemAtPosition(position);
cursorSDFStr = getPathCursor.getString(getPathCursor
.getColumnIndexOrThrow("sdfdate"));
cursorCalDateStr = getPathCursor.getString(getPathCursor
.getColumnIndexOrThrow("caldate"));
cursorURLStr = getPathCursor.getString(getPathCursor
.getColumnIndexOrThrow("path"));
cursorTitleStr = getPathCursor.getString(getPathCursor
.getColumnIndexOrThrow("title"));
cursorVerseStr = getPathCursor.getString(getPathCursor
.getColumnIndexOrThrow("verse"));
//--- video fragment here
fragTrans = fragMan.beginTransaction();
searchListFrag = fragMan.findFragmentByTag(SEARCH_TAB_TAG);
if(searchListFrag != null)fragTrans.remove(searchListFrag);
video_FRG = new SSIVideoFrag();
fragTrans.replace(R.id.frag6_main_FL, video_FRG);
fragTrans.addToBackStack(SSIVideoFrag.TAG);
fragTrans.commit();
}
});//--- END onClick
}
});//--- END Button
return searchRootView;
}// --- END Create the ROOT VIEW
}
Недавние и функции поиска работают, когда я нажимаю элемент списка, который я получаю NullPointerException
. Есть идеи?
вы можете отправить LogCat пожалуйста –
fragTrans = fragMan.beginTransaction(); где вы объявили FragmentTransaction и FragmentManager? – Mike
Нажмите на заднюю часть стола? Зачем? Я думал, что видео должно заменить прежнее. И попробуйте добавить вместо замены и прокомментировать нажатие на backstack. – icbytes