Android 개발자 여러분, 안녕하세요.
이 조각과 PagerAdapter를 시작하는 Activity에서 PagerAdapter를 통해 조각에 만든 탭에 표시된 ListView를 업데이트해야합니다. 하지만 활성 탭에서 특정 목록보기를 얻는 방법을 모르겠습니다.
listview 어댑터를 통해 notifyDataSetChanged에 대해 알고 있지만 활동에서 액세스하는 방법을 모릅니다.
자세한 내용은 다음과 같습니다.
나는 다음과 같은 수업이 있습니다.
public class ChannelsListTabsFragment extends Fragment {
private SlidingTabLayout mSlidingTabLayout;
private ViewPager mViewPager;
private ChannelCountriesModel[] tabTitles;
private Context applicationContext;
private String session;
private long time_offset;
// Nastaveni listview, když se klikne
private ListView listViewFragment;
public static ChannelsListTabsFragment newInstance(String session, ChannelCountriesModel[] tabTitles, long time_offset)
{
ChannelsListTabsFragment fragment = new ChannelsListTabsFragment();
Bundle args = new Bundle();
args.putParcelableArray("tabTitles", tabTitles);
args.putString("session", session);
args.putLong("time_offset", time_offset);
fragment.setArguments(args);
return fragment;
}
public ChannelsListTabsFragment()
{
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_tabbet, container, false);
System.out.println("onCreateView");
applicationContext = getActivity().getApplicationContext();
tabTitles = (ChannelCountriesModel[]) getArguments().getParcelableArray("tabTitles");
session = getArguments().getString("session");
time_offset = getArguments().getLong("time_offset");
return inflater.inflate(R.layout.channels_list_tabs_fragment, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
mViewPager.setAdapter(new ListChannelsPagerAdapter(session, tabTitles));
mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getResources().getColor(R.color.myred);
}
@Override
public int getDividerColor(int position) {
return getResources().getColor(R.color.myred);
}
});
mSlidingTabLayout.setViewPager(mViewPager);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (v.getId()==R.id.channelList) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
Object o = listViewFragment.getItemAtPosition(info.position);
Channel_Model channelModel = (Channel_Model) o;
menu.setHeaderTitle(channelModel.getCh_Name());
String[] menuItems = getResources().getStringArray(R.array.menu);
for (int i = 0; i<menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItems[i]);
}
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if (getUserVisibleHint()) {
// Something with it...
}
return true;
}
return false;
}
class ListChannelsPagerAdapter extends PagerAdapter
{
private ChannelCountriesModel[] tabTitles;
private String session;
public ListChannelsPagerAdapter(String session, ChannelCountriesModel[] tabTitles)
{
this.tabTitles = tabTitles;
this.session = session;
}
@Override
public int getCount() {
try {
return tabTitles.length;
}
catch (Exception e)
{
//e.printStackTrace();
return 0;
}
}
@Override
public boolean isViewFromObject(View view, Object o) {
return o == view;
}
@Override
public CharSequence getPageTitle(int position) {
return tabTitles[position].getName();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// Inflate a new layout from our resources
View rootView = getActivity().getLayoutInflater().inflate(R.layout.channels_list_tabs_pager_item, container, false);
container.addView(rootView);
ListView lv1;
lv1 = (ListView) rootView.findViewById(R.id.channelList);
lv1.requestFocus(); // Here is plan to fill listview
return rootView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
조각은 다음과 같은 활동에서 시작됩니다.
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
ChannelsListTabsFragment fragment = ChannelsListTabsFragment.newInstance(session, channelCountries, time_offset);
transaction.replace(R.id.channels_list_tabs_fragment, fragment);
transaction.commit();
조언을 해주셔서 대단히 감사합니다. 디
활동에서 어댑터를 알리는 방법은 다음과 같습니다.
조각이 생성되는 한 원하는 곳에서이 문을 호출 할 수 있습니다.
if (channelsListTabsFragment != null) {
channelsListTabsFragment.updateAdapter();
}
활동 클래스
public class MainActivityTesting extends AppCompatActivity {
ChannelsListTabsFragment channelsListTabsFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity_testing);
Fragment fragment = new ChannelsListTabsFragment();
this.getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
channelsListTabsFragment = (ChannelsListTabsFragment) fragment;
}
public void onEvent(GetChannelsEvent event) {
channelsCountriesMap = event.getGetChannelsEvent();
// Update fragment adapter within the onEvent.
if (channelsListTabsFragment != null) {
channelsListTabsFragment.updateAdapter();
}
}
}
파편
public class ChannelsListTabsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_layout, container, false);
return v;
}
// Here your adapter will be updated
// It is being called from the Activity
public void updateAdapter() {
if (channel_Row_Adapter != null) {
channel_Row_Adapter.notifyDataSetChanged();
}
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다