6

Tôi đang sử dụng https://github.com/mikepenz/MaterialDrawer làm thư viện cho Ngăn kéo và tôi đang sử dụng https://github.com/florent37/MaterialViewPager cho Xem Máy nhắn tin.Trễ khi thay thế đoạn XemPager trong Thanh Điều hướng qua FrameLayout?

Vấn đề mà tôi phải đối mặt là tôi phải đối mặt với một chút chậm trễ (loại tụt hậu) khi tôi nhấp vào mục danh sách trong ngăn kéo của tôi và đóng của drwawer, sau đó mảnh được thay thế. Tôi phải đối mặt với điều này trong một mảnh mà là một ViewPager hơn là một mảnh.

see the image

Activity(which has NavBar): 

public class mvpAct extends AppCompatActivity { 
private RelativeLayout mRelativeLayout; 
public static List<Model_Slots> list; 
private Drawer result; 
private static GetDetails gd; 
public static List<Model_Daywise> todayslist_m; 
public static List<Model_Daywise> todayslist_t; 
public static List<Model_Daywise> todayslist_w; 
public static List<Model_Daywise> todayslist_th; 
public static List<Model_Daywise> todayslist_fr; 
public static List<detailattlist_subcode> detail_att_all = new ArrayList<>(); 
public static HashMap<String, List<DetailAtten>> hash = new HashMap<>(); 
public static List<AttendBrief> attendBriefs = null; 
public static List<Marks_Model> marks_det; 
public static List<PBL_Model> lpbl; 

public void setMTWTFLists(final Context ctxt) { 
    String mark = new SharedPrefs(ctxt).getMsg("marksdone").trim(); 
    String att = new SharedPrefs(ctxt).getMsg("ttdone").trim(); 
    String tt = new SharedPrefs(ctxt).getMsg("attendone").trim(); 
    Log.d("Done Value", mark + "\t" + att + "\t" + tt); 
    if (mark.equals("y") && att.equals("y") && tt.equals("y")) { 
     Log.d("Here", "naive"); 
     try { 
      new Thread(new Runnable() { 
       public void run() { 
        todayslist_m = new MTWTHgetset(ctxt, "monday").getAllCredentials(); 
        todayslist_t = new MTWTHgetset(ctxt, "tuesday").getAllCredentials(); 
        todayslist_w = new MTWTHgetset(ctxt, "wednesday").getAllCredentials(); 
        todayslist_th = new MTWTHgetset(ctxt, "thursday").getAllCredentials(); 
        todayslist_fr = new MTWTHgetset(ctxt, "friday").getAllCredentials(); 
       } 
      }).start(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 


} 

@Override 
public void onBackPressed() { 
    if (gd.isAdded()) 
     getSupportFragmentManager() 
       .beginTransaction().remove(gd).commit(); 
    else super.onBackPressed(); 

} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.drawer_frame_mvp); 
    gd = new GetDetails(); 
    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction().add(R.id.mvp_frame_act, gd).commit(); 
    } 
    try { 
     list = new Slots_GetSet(this).getAllCredentials(); 
     String classnbrs[] = new String[list.size()]; 
     int r = 0; 
     for (Model_Slots ms : list) { 
      classnbrs[r++] = ms.getNumber().trim(); 
     } 
     for (int t = 0; t < classnbrs.length; t++) { 
      detailattlist_subcode dr = new detailattlist_subcode(); 
      hash.put(classnbrs[t], new IndivAttGetSet(this, " table_of_" + classnbrs[t]).getAllCredentials()); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    try { 
     attendBriefs = new Attend_GetSet(this).getAllCredentials(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    try { 
     marks_det = new CBL_Get_Set(this).getAllCredentials(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    try { 
     lpbl = new PBL_Get_Set(this).getAllCredentials(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     lpbl = new ArrayList<>(); 
    } 
    try { 
     setMTWTFLists(getApplication()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    PrimaryDrawerItem item1 = new PrimaryDrawerItem().withName("Slots").withIdentifier(1); 
    SecondaryDrawerItem item2 = new SecondaryDrawerItem().withName("ImageStudentLogin").withIdentifier(2); 
    result = new DrawerBuilder() 
      .withActivity(this) 
      .addDrawerItems(
        item1, 
        new DividerDrawerItem(), 
        item2, 
        new SecondaryDrawerItem().withName("Setup"), 
        new SecondaryDrawerItem().withName("Daywise") 
      ) 
      .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
       @Override 
       public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 
        displayView(position); 
        if (result.isDrawerOpen()) 
         result.closeDrawer(); 
        return true; 
       } 
      }) 
      .build(); 

} 


private void displayView(int position) { 
    Fragment fragment = null; 
    switch (position) { 
     case 0: 
      String s = getSharedPreferences("sp", Context.MODE_PRIVATE).getString("own", "no"); 
      if (s.equals("already")) { 
       fragment = new Fragment_slots(); 
      } else if (s.equals("yes")) { 
       list = new Slots_GetSet(getApplicationContext()).getAllCredentials(); 
       fragment = new Fragment_slots(); 
      } else if (s.equals("no")) { 
       fragment = new GetDetails(); 
      } 
      break; 
     case 2: 
      fragment = new Photo_Stu(); 
      break; 
     case 3: 
      fragment = new GetDetails(); 
      break; 
     case 4: 
      fragment = MaterialVPFrag.newInstance(); 
      break; 
     default: 
      fragment = MaterialVPFrag.newInstance(); 
      break; 
    } 
    if (fragment != null) { 
     FragmentManager fm = getSupportFragmentManager(); 
     fm.beginTransaction().replace(R.id.mvp_frame_act, fragment).commit(); 
    } else { 
     Log.e("DrawerActivity", "Error creating fragment"); 
    } 
} 


} 

Fragment (nơi tôi phải đối mặt với lag (loại lag nói lắp) trong quá trình đóng ngăn kéo, Sau đó này được thay thế so với khung khác):

public class MaterialVPFrag extends Fragment { 
private MaterialViewPager mViewPager; 

public static MaterialVPFrag newInstance() { 
    return new MaterialVPFrag(); 
} 

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

} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    mViewPager = (MaterialViewPager) view.findViewById(R.id.materialViewPager); 
    mViewPager.getViewPager().setAdapter(new FragmentStatePagerAdapter(getChildFragmentManager()) { 
     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return new RecyclerViewFragment(mvpAct.todayslist_m); 
       case 1: 
        return new RecyclerViewFragment(mvpAct.todayslist_t); 
       case 2: 
        return new RecyclerViewFragment(mvpAct.todayslist_w); 
       case 3: 
        return new RecyclerViewFragment(mvpAct.todayslist_th); 
       case 4: 
        return new RecyclerViewFragment(mvpAct.todayslist_fr); 
       default: 
        return new RecyclerViewFragment(mvpAct.todayslist_m); 
      } 
     } 

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

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "Monday"; 
       case 1: 
        return "Tuesday"; 
       case 2: 
        return "Wednesday"; 
       case 3: 
        return "Thursday"; 
       case 4: 
        return "Friday"; 
      } 
      return ""; 
     } 
    }); 
    mViewPager.setMaterialViewPagerListener(new MaterialViewPager.Listener() { 
     @Override 
     public HeaderDesign getHeaderDesign(int page) { 
      switch (page) { 
       case 0: 
    return HeaderDesign.fromColorAndDrawable(getResources().getColor(R.color.colorPrimary), getResources().getDrawable(R.drawable.myback)); 
       case 1: 
        return HeaderDesign.fromColorResAndUrl(
          R.color.blue, 
          "http://cdn1.tnwcdn.com/wp-content/blogs.dir/1/files/2014/06/wallpaper_51.jpg"); 
       case 2: 
        return HeaderDesign.fromColorResAndUrl(
          R.color.cyan, 
          "http://www.droid-life.com/wp-content/uploads/2014/10/lollipop-wallpapers10.jpg"); 
       case 3: 
        return HeaderDesign.fromColorResAndUrl(
          R.color.red, 
          "http://www.tothemobile.com/wp-content/uploads/2014/07/original.jpg"); 
      } 
      return null; 
     } 
    }); 

    mViewPager.getViewPager().setOffscreenPageLimit(mViewPager.getViewPager().getAdapter().getCount()); //it works without it don't know why! 
    mViewPager.getPagerTitleStrip().setViewPager(mViewPager.getViewPager()); 
    mViewPager.getPagerTitleStrip().setBackgroundColor(Color.TRANSPARENT); 
    mViewPager.getPagerTitleStrip().setIndicatorColor(Color.RED); 
    mViewPager.getPagerTitleStrip().setTabBackground(Color.TRANSPARENT); 
    View logo = view.findViewById(R.id.logo_white); 
    if (logo != null) 
     logo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mViewPager.notifyHeaderChanged(); 

      } 
     }); 

} 
} 

Fragment Nội của ViewPager:

public class RecyclerViewFragment extends Fragment { 
private RecyclerView mRecyclerView; 
public static RecyclerView.Adapter mAdapter; 
List<Model_Daywise> list; 

public RecyclerViewFragment() { 
} 

public RecyclerViewFragment(List<Model_Daywise> lis) { 
    list = lis; 
} 

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

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    mRecyclerView.setLayoutManager(layoutManager); 
    mAdapter = new RecyclerViewMaterialAdapter(new CardAdapter_Daywise(list, getActivity())); 
    mRecyclerView.setAdapter(mAdapter); 
    MaterialViewPagerHelper.registerRecyclerView(getActivity(), mRecyclerView, null); 
} 
} 

Cảm ơn!

+0

bạn đã thử sửa đổi chậm trễ dưới đây chưa? Hoặc bạn có thể cung cấp một dự án mẫu cho thấy vấn đề không? – mikepenz

Trả lời

2

Phiên bản mới nhất của MaterialDrawer đi kèm với độ trễ 50ms được tích hợp sau khi kích hoạt sự kiện nghe trước khi đóng ngăn.

Nếu bạn có một hành vi phức tạp hơn khi chuyển đổi các đoạn, bạn nên sửa đổi độ trễ này và thay đổi thành 150ms hoặc thậm chí 250ms.

này có thể được thực hiện thông qua các phương pháp xây dựng

withDelayOnDrawerClose(int delay) 

Nếu bạn muốn ngăn kéo để đóng ngay lập tức và sau đó chuyển đổi các mảnh vỡ bạn nên thiết lập sự chậm trễ để 0ms và thêm một handler trong mục ngăn kéo của bạn nhấp chuột nghe

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     //your logic in here 
    } 
}, yourDelay); 
+0

Vấn đề là không có độ trễ (nói lắp) cho một đoạn đơn giản (ví dụ: tôi có 4 EditText và một Button) nhưng nó xảy ra cho lớp MaterialVPFrag.class ở trên (ViewPager trong phân đoạn, độ trễ khoảng 0.8sec) đã đề cập ở trên và một mảnh có RecyclerView trong nó (độ trễ khoảng 0,5 giây). –

+0

Xin chào, Xem tôi đã chỉnh sửa bài đăng và thêm một .gif của sự cố. –

+0

bạn đã thử những điều tôi đăng trong câu trả lời của tôi chưa. và thêm một số chậm trễ. điều này càng phức tạp thì mảnh vỡ sẽ mất nhiều thời gian hơn để bắt đầu. do đó, nó sẽ gây lag bởi vì giao diện người dùng được xử lý trên chủ đề chính và điều này sẽ chặn các hình động quá – mikepenz

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