2016-02-29 16 views
11

Các lỗi bắt đầu xuất hiện chỉ sau khi tôi bắt đầu sử dụng các mảnh vỡ trong dự ántrống android.support.v4.app.Fragment.setMenuVisibility (boolean)' trên một tài liệu tham khảo đối tượng null

đây là mã của tôi ..

public class MainActivity extends AppCompatActivity { 

private Toolbar toolbar; 
private ViewPager mPager; 
private SlidingTabLayout mTabs; 
private MyPagerAdapter adapter; 

public static final int product_result = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    toolbar = (Toolbar) findViewById(R.id.app_bar); 

    setSupportActionBar(toolbar); 
    assert getSupportActionBar() != null; 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 

    NavigationDrawerFragment navigationDrawerFragment = (NavigationDrawerFragment) 
      getSupportFragmentManager().findFragmentById(R.id.fragment_nav_drawer); 
    navigationDrawerFragment.setUp(R.id.fragment_nav_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar); 

    mPager = (ViewPager) findViewById(R.id.pager); 
    adapter = new MyPagerAdapter(getSupportFragmentManager()); 
    mPager.setAdapter(adapter); 

    mTabs = (SlidingTabLayout) findViewById(R.id.tabs); 
    mTabs.setDistributeEvenly(true); 
    mTabs.setCustomTabView(R.layout.custom_tab_view, R.id.tabText); 
    int bgColor = ContextCompat.getColor(this, R.color.colorPrimary); 
    mTabs.setBackgroundColor(bgColor); 
    mTabs.setSelectedIndicatorColors(ContextCompat.getColor(MainActivity.this, R.color.colorAccent)); 
    mTabs.invalidate(); 
    mTabs.setViewPager(mPager); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 

     return true; 
    } 
    if (id == R.id.navigate) { 
     startActivity(new Intent(this, SubActivity.class)); 
    } 
    if (id == R.id.TabActivity) { 
     startActivity(new Intent(this, ActivityUsingTabLibrary.class)); 
    } 
    if (id == R.id.VectorTest) { 
     startActivity(new Intent(this, VectorTestActivity.class)); 
    } 
    return super.onOptionsItemSelected(item); 
} 


class MyPagerAdapter extends FragmentStatePagerAdapter { 
    int icons[] = {R.drawable.home, R.drawable.hot_article, R.drawable.dizzy_person}; 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 

     Fragment fragment = null; 
     switch(position){ 
      case product_result: 
       fragment = FragmentProduct.newInstance("",""); 
       break; 
     } 
     return fragment; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Drawable drawable = ResourcesCompat.getDrawable(getResources(), icons[position], null); 
     drawable.setBounds(0, 0, 36, 36); 
     ImageSpan imageSpan = new ImageSpan(drawable); 
     SpannableString spannableString = new SpannableString(" "); 
     spannableString.setSpan(imageSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     return spannableString; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

}

đây là fragment.class của tôi, nơi im đi JSONObject bánh mì nướng.

public class FragmentProduct extends Fragment { 

public static final String product_url = "http://oasisgroups.com/oApp/product.php"; 

private static final String ARG_PARAM1 = "param1"; 
private static final String ARG_PARAM2 = "param2"; 

private String mParam1; 
private String mParam2; 
private VolleySingleton volleySingleton; 
private ImageLoader imageLoader; 
private RequestQueue requestQueue; 

public FragmentProduct() { 
    // Required empty public constructor 
} 

public static FragmentProduct newInstance(String param1, String param2) { 
    FragmentProduct fragment = new FragmentProduct(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

public static String getRequestUrl(int limit) { 
    return product_url + "&limit=" + limit; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 

    volleySingleton = VolleySingleton.getInstance(); 
    requestQueue = volleySingleton.getmRequestQueue(); 
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, getRequestUrl(10), 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        L.t(getActivity(), response.toString()); 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }); 
    requestQueue.add(request); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_product, container, false); 
} 

}

stacktrace

02-29 12:10:01.047 17100-17100/com.mydesign.rockstar.materialdesignexample E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.mydesign.rockstar.materialdesignexample, PID: 17100 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setMenuVisibility(boolean)' on a null object reference 
    at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:116) 
    at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:870) 
    at android.support.v4.view.ViewPager.populate(ViewPager.java:1086) 
    at android.support.v4.view.ViewPager.populate(ViewPager.java:952) 
    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474) 
    at android.view.View.measure(View.java:18804) 
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:901) 
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
    at android.view.View.measure(View.java:18804) 
    at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:940) 
    at android.view.View.measure(View.java:18804) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
    at android.view.View.measure(View.java:18804) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954) 
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
    at android.view.View.measure(View.java:18804) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
    at android.view.View.measure(View.java:18804) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954) 
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
    at android.view.View.measure(View.java:18804) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
    at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) 
    at android.view.View.measure(View.java:18804) 
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2112) 
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1228) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1464) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6060) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
    at android.view.Choreographer.doFrame(Choreographer.java:606) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
    at android.os.Handler.handleCallback(Handler.java:746) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5443) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

tôi cũng nhìn thấy vấn đề này cùng trong link này và tôi áp dụng giải pháp của mình nhưng nó sẽ không làm việc cho tôi .. i m vẫn gặp khó khăn, giúp đỡ tôi. để kiểm tra mã của tôi và gợi ý cho tôi biết tôi đang thiếu gì.

+0

Bạn đã mở rộng với cùng Framgent? android.support.v4.app.Fragment –

+0

vâng .. tôi đã kiểm tra điều này –

+0

Bạn muốn gọi setMenuVisible trong mã của mình ở dòng nào? –

Trả lời

22

oh có .. cuối cùng tôi đã tìm thấy lỗi của mình .. trước hết không có lỗi trong mã của tôi. mọi thứ đều đúng.

tôi có ba tab bố trí và i m đi qua chỉ cho một tablayout và hai khác đang nhận được null, vì vậy tôi phải có để áp dụng ba báo cáo trường hợp chuyển đổi.

public Fragment getItem(int position) { 

    Fragment fragment = null; 
    switch(position){ 
     case product_result: 
      fragment = FragmentProduct.newInstance("",""); 
      break; 
    } 
    return fragment; 
} 

thay

public Fragment getItem(int num) { 
     Fragment fragment = null; 
     switch (num) { 
      case TAB_PRODUCT_RESULT: 
       fragment = FragmentProduct.newInstance("", ""); 
       break; 
      case TAB_SECOND: 
       fragment = MyFragment.getInstance(num); 
       break; 
      case TAB_THIRD: 
       fragment = MyFragment.getInstance(num); 
       break; 
     } 
     return fragment; 
    } 

thats it ..

9

Tôi nghĩ rằng sự cố nằm trong phương thức public Fragment getItem(int position) của MyPagerAdapter. Đoạn mã của bạn bên dưới đang trả lại các đoạn null.

Fragment fragment = null; 
switch(position){ 
    case product_result: 
     fragment = FragmentProduct.newInstance("",""); 
     break; 
    } 
return fragment; 

Bạn chỉ có được một mảnh thực sự cho các vị trí 0, vì product_result được khởi tạo để 0. Trong tất cả các trường hợp khác, nó trả về null. Sửa đổi đoạn mã trên để luôn trả về một thể hiện phân đoạn không phải là rỗng.

+0

xin lỗi ,, nhưng đây không phải là giải pháp của tôi –

+1

@SagarChavada giải pháp của bạn chỉ là một phiên bản tiết của mình. : P – Sufian

Các vấn đề liên quan