मैं एंड्रॉइड के support.v4
पैकेज का उपयोग कर रहा हूं ताकि एक व्यूपेगर विकसित हो सके जिसमें एकाधिक Fragment
एस शामिल हैं।व्यूपेगर टुकड़े समय के साथ नष्ट हो रहे हैं?
जब उपयोगकर्ता पृष्ठ बदलता है तो मैं दृश्यों को छिपाने की कोशिश कर रहा हूं। इसलिए, मैंने अपने एडाप्टर को सुनने के लिए OnPageChangeListener
लागू किया, और जब कोई पृष्ठ परिवर्तन होता है तो Fragment
एस में update()
विधि को कॉल करें। लेकिन मुझे NullPointerException
मिल रहा है, और मैं यह नहीं समझ सकता कि क्यों।
यहाँ कोड है:
public class MyActivity extends FragmentActivity implements
OnPageChangeListener {
private static final int NUM_ITEMS = 2;
private ViewPager mPager;
private static SpaceAdapter mAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new SpaceAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.setOnPageChangeListener(this);
}
public static class SpaceAdapter extends FragmentPagerAdapter {
public SpaceAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new MyFragment();
case 1:
return new MyFragment();
default:
return new MyFragment();
}
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
Log.i("pagination", "scroll state changed: " + arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// Log.i("pagination", "page scroll: " + arg0 + " with: " + arg1 + ", " + arg2);
if (mAdapter.getItem(arg0) instanceof IUpdateOnPage) {
((IUpdateOnPage) mAdapter.getItem(arg0)).updateOnPage();
}
}
@Override
public void onPageSelected(int arg0) {
Log.i("pagination", "page selected: " + arg0);
}
}
और
public class MyFragment extends Fragment implements
SurfaceHolder.Callback, IUpdateOnPage {
private SurfaceView charts;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.crew, null);
bindViews(v);
return v;
}
private void bindViews(View v) {
charts = (SurfaceView) v.findViewById(R.id.civ_charts);
charts.getHolder().addCallback(this);
Log.i("wtf", "huh " + String.valueOf(charts == null)); // logs false
}
@Override
public void updateOnPage() {
if (charts != null) {
Log.i("crew surface", "hidden");
charts.setVisibility(View.GONE);
} else {
Log.i("crew surface", "charts is null"); //THIS HERE gets logged
}
}
}
wWhen मैं कॉपी/पेस्ट किया मैं SurfaceHolder.Callback
विधियां निकाल दी है, लेकिन वे कर रहे हैं। bindViews(v)
विधि लॉग अगर charts == null
, और यह हमेशा झूठी वापसी करता है। जब मैं पृष्ठ, updateOnPage
कहलाता है, और charts == null
सत्य देता है। ऐसा क्यों होता है और मैं इसके आसपास कैसे हो सकता हूं?
और इस लाइन है 108:
charts.setVisibility(View.GONE);
ठीक है, आगे की जांच के बाद, मुझे लगता है कि अंकन शुरू होने पर टुकड़ा नष्ट हो जाता है (भले ही दृश्य बना रहता है?)। जब स्वाइप करते हैं तो मैं अभी भी टुकड़ा "आधा" देख सकता हूं जब तक कि नया टुकड़ा पूर्ण-दृश्य में न हो जाए। इसलिए, यदि सभी संदर्भ एकत्र किए जा रहे हैं और जो कुछ भी बचा है, वह दृश्य है, मैं यह कैसे कर सकता हूं? – edthethird
यदि आपको 'NullPointerException' मिल रहा है, तो क्या आप लॉगकट आउटपुट पोस्ट कर सकते हैं? –
अच्छी तरह से मैं वास्तव में इसे पकड़ रहा हूं इसलिए एक अपवाद फेंक दिया नहीं गया है। समस्या 'charts.setVisibility (View.GONE) है;'। चार्ट शून्य है। यह कोड के दूसरे नमूने के बहुत अंत में है, ठीक है 'else' से ऊपर। जोड़ा गया स्टैक ट्रेस। – edthethird