TabLayout dentro de fragmento da mala vista de elementos
Estoy trabajando en el proyecto que utilizo Tablayout dentro de fragmento, tengo tres pestañas donde se recopilan datos de servicio web, esta parte de la aplicación muestran preguntas, tenemos tres categorías una para la reciente, la segunda para un contestó tercero para toda la vista de la pregunta
Aquí está mi situación mi desarrollador web me diseño el artículo de la pregunta de vuelta del servicio de Web, comparten todos la misma estructura en artículo vuelto pero los datos cambiaron según el requisito.
- Cómo pegar TabLaout en la parte superior de ScrollView?
- Diseño de la pestaña de Android: Ancho de la pestaña de pestañas de ajuste con respecto al título de pestaña
- Tablayout con vista personalizada Broken en 23.4.0 lib de diseño
- Ficha que no toma el ancho completo en el dispositivo Tablet
- TabLayout seleccionado El icono Tab no está seleccionado al iniciar:
public class Questions_Fragment extends Fragment { private TabLayout mTablayout; private ViewPager mViewpager; public static Questions_Fragment newInstance() { Questions_Fragment fragment = new Questions_Fragment(); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.questions_layout, null); mViewpager = (ViewPager) v.findViewById(R.id.viewPager); setupViewPager(mViewpager); mTablayout = (TabLayout) v.findViewById(R.id.tabs); mTablayout.setupWithViewPager(mViewpager); return v; } private void setupViewPager(ViewPager mViewpager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); adapter.addFrag( QuestionsFragModel.newInstance(VolleyRequestHandler.RECENT_INT) , getResources().getString(R.string.newest)); adapter.addFrag( QuestionsFragModel.newInstance(VolleyRequestHandler.UNANSWER_INT) , getResources().getString(R.string.notanswered)); adapter.addFrag( QuestionsFragModel.newInstance(VolleyRequestHandler.ALLPOSTS_INT) , getResources().getString(R.string.allposts)); mViewpager.setAdapter(adapter); }
Mi clase del adaptador del paginador de la visión extiendo los datos de FragmentStatePagerAdapter
podría cambiar cada vez que la lengüeta abierta del usuario
public class ViewPagerAdapter extends FragmentStatePagerAdapter { private List<Fragment> mFragmentList = new ArrayList<>(); private List<String> mFragmentTitleList= new ArrayList<>(); public ViewPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFrag(Fragment fra , String title){ mFragmentList.add(fra); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } }
Pero veo que me da una visión equivocada, muestra imagen en cuestión no tengo imagen y da respuesta a pregunta sin respuesta
Lo siento por mi larga pregunta, pero quiero saber lo que está mal con mi código?
Mi adaptador de lista
public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.ViewHolder> { private Context _Context; private List<QuestionItem> Questions = new ArrayList<>(); private API api; private int num; private int lastPosition = -1; public static final String BASE_POST_URl = "url...."; public ListViewAdapter(Context context, List<QuestionItem> Questions) { this._Context = context; this.Questions = Questions; api = new API(context); } public ListViewAdapter(Context context, List<QuestionItem> Questions, int num) { this._Context = context; this.Questions = Questions; this.num = num; api = new API(context); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(_Context); View itemView = inflater.inflate(R.layout.question_row, parent, false); return new ViewHolder(itemView); } @Override public void onBindViewHolder(final ViewHolder holder, final int position) { Typeface tf = Typeface.createFromAsset(_Context.getAssets(), "fonts/GE_SS_Two_Bold.otf"); Typeface tfreg = Typeface.createFromAsset(_Context.getAssets(), "fonts/GE_SS_Two_Light.otf"); ImageLoader _ImageLoader = MySingleton.getInstance(_Context).getmImageLoader(); if (Questions.get(position).user.userimageURL != null) { if (!Questions.get(position).user.getUserimageURL().isEmpty()) { //holder.userimageprog.setVisibility(View.VISIBLE); holder.imageView.setImageUrl(Profile_Fragment.BASE_URL + Questions.get(position).user.getUserimageURL(), _ImageLoader); } } if(Questions.get(position).Que_image_url != null){ if (!Questions.get(position).getQue_image_url().isEmpty()) { holder._FrameLayout.setVisibility(View.VISIBLE); holder.post_img.setVisibility(View.VISIBLE); //holder.post_img_pro.setVisibility(View.VISIBLE); holder.post_img.setImageUrl(BASE_POST_URl + Questions.get(position).getQue_image_url(), _ImageLoader); } } holder.imageView.setDefaultImageResId(R.drawable.profile); holder.username.setTypeface(tf); holder.desc.setTypeface(tfreg); holder.Date.setTypeface(tfreg); holder.AnswersCount.setTypeface(tfreg); if(Questions.get(position).user.username != null){ holder.username.setText(Questions.get(position).user.username); } if(Questions.get(position).Que_Content != null){ holder.desc.setText(Questions.get(position).Que_Content); } if(Questions.get(position).category != null){ holder.Category.setText(Questions.get(position).category); } if(Questions.get(position).Que_Date != null){ holder.Date.setText(Questions.get(position).Que_Date); } if (!Questions.get(position).getComment().isEmpty()) { holder.arrow.setVisibility(View.VISIBLE); holder.AnswersCount.setVisibility(View.VISIBLE); holder.AnswersCount.setText(_Context.getResources().getString(R.string.youhaveanswer)); } holder.arrow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent (_Context , ViewAnswers.class); intent.putExtra("passedobject", (Parcelable) Questions.get(position)); _Context.startActivity(intent); } }); // Animation animation = null; // animation = AnimationUtils.loadAnimation(_Context, // R.anim.up_from_bottom); // animation.setDuration(500); // view.setAnimation(animation); // animation = null; // // Animation animation = AnimationUtils.loadAnimation(_Context, // (pos > lastPosition) ? R.anim.up_from_bottom // : R.anim.down_from_top); // view.startAnimation(animation); // lastPosition = pos; } @Override public long getItemId(int position) { return position; } @Override public int getItemCount() { return Questions.size(); } public class ViewHolder extends RecyclerView.ViewHolder { protected NetworkImageView imageView, post_img; protected TextView desc, Category, username, Date, AnswersCount; protected ProgressBar userimageprog, post_img_pro; protected ImageView arrow; protected FrameLayout _FrameLayout; public ViewHolder(View itemView) { super(itemView); imageView = (NetworkImageView) itemView.findViewById(R.id.ques_user_img); desc = (TextView) itemView.findViewById(R.id.ques_content); Category = (TextView) itemView.findViewById(R.id.category); post_img = (NetworkImageView) itemView.findViewById(R.id.post_img); userimageprog = (ProgressBar) itemView.findViewById(R.id.userimgae_prog); post_img_pro = (ProgressBar) itemView.findViewById(R.id.post_prog); username = (TextView) itemView.findViewById(R.id.username_ques); Date = (TextView) itemView.findViewById(R.id.date); AnswersCount = (TextView) itemView.findViewById(R.id.answers_con); arrow = (ImageView) itemView.findViewById(R.id.imageView1); _FrameLayout = (FrameLayout)itemView.findViewById(R.id.frameLayout2); } } }
QuestionsFragModel ver
public class QuestionsFragModel extends Fragment implements OnClickListener { private RecyclerView Ques_list; private ProgressBar list_prog; private ListViewAdapter adapter; private List<QuestionItem> Questions = new ArrayList<>(); private TextView reload; private VolleyRequestHandler _VolleyRequestHandler; private int CONST_TYPE = 0; public static final String PASSED_INT = "passed_number"; private CoordinatorLayout _coordiatelayout; static QuestionsFragModel newInstance(int type) { QuestionsFragModel f = new QuestionsFragModel(); Bundle bundle = new Bundle(); bundle.putInt(PASSED_INT , type); f.setArguments(bundle); return f; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.question_layout, container, false); CONST_TYPE = getArguments() != null ? getArguments().getInt(PASSED_INT) : 7; _VolleyRequestHandler = new VolleyRequestHandler(getActivity()); _coordiatelayout = (CoordinatorLayout) v.findViewById(R.id.coordiatelayout); Ques_list = (RecyclerView) v.findViewById(R.id.questionlist); Ques_list.setLayoutManager(new LinearLayoutManager(getActivity())); adapter = new ListViewAdapter(getActivity(), Questions); Ques_list.setAdapter(adapter); list_prog = (ProgressBar) v.findViewById(R.id.progressbar); reload = (TextView) v.findViewById(R.id.reload); getQuestationsPosts(); reload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View position) { getQuestationsPosts(); } }); final FloatingActionButton floatingView = (FloatingActionButton) v.findViewById(R.id.FloatingView); if (floatingView != null) { floatingView.setOnClickListener(this); } return v; } public void getQuestationsPosts() { API api = new API(getActivity()); if (api.isNetworkConnected()) { list_prog.setVisibility(View.VISIBLE); reload.setVisibility(View.GONE); FetchQuestationsFromWeb(); } else { Snackbar.make(_coordiatelayout, getResources().getString(R.string.nointernet), Snackbar.LENGTH_LONG).show(); Ques_list.setVisibility(View.GONE); reload.setVisibility(View.VISIBLE); } } private void onSuccessResponse(Object response){ list_prog.setVisibility(View.GONE); reload.setVisibility(View.GONE); Ques_list.setVisibility(View.VISIBLE); if(Questions != null){ Questions.clear(); } Questions = (List < QuestionItem>) response; adapter = new ListViewAdapter(getActivity() ,Questions); Ques_list.setAdapter(adapter); } private void onErrorResponse(String error){ list_prog.setVisibility(View.GONE); reload.setVisibility(View.VISIBLE); Snackbar.make(_coordiatelayout , error , Snackbar.LENGTH_LONG).show(); } private void FetchQuestationsFromWeb() { _VolleyRequestHandler.HandleRequests(Request.Method.POST , CONST_TYPE, null, new VolleyResponseCallBack() { @Override public void RequestSuccess(Object response) { onSuccessResponse(response); } @Override public void RequestFailed(String error) { onErrorResponse(error); } }); } @Override public void onClick(View arg0) { startActivity(new Intent(getActivity(), Add_Question.class)); } }
- Cambiar los iconos TabLayout a la izquierda, arriba, derecha o abajo en com.android.support:design:23.1.0
- Pestaña blanca con texto oscuro
- No permita que el usuario haga clic en una de las pestañas
- Cómo cambiar la pestaña seleccionada Color del texto con TabLayout de código en Android?
- Error al cargar fragmentos cuando las pestañas + viewpager dentro de scrollview?
- Com.android.support:design:23.3.0 roto cuando se usa la vista personalizada en Tablayout
- FragmentManager ya está ejecutando transacciones después de usar el método setOffscreenPageLimit ()
- Android TabLayout con pestaña activa siempre en el centro, al igual que en la aplicación Play Kiosco
No sé porqué usted utiliza FragmentStatePagerAdapter
vez de FragmentPagerAdapter
cuando usted tiene solamente 3 fragmentos.
AFAIK, FragmentStatePagerAdapter
es mejor para el rendimiento si tiene una gran cantidad de fragmentos, ya que no almacena todo el fragmento en la memoria.
De todos modos, FragmentStatePagerAdapter
salvará el paquete de fragmentos de savedInstanceState cuando se destruye. Y cuando el usuario navega hacia atrás, el nuevo fragmento será restaurado usando el estado del fragmento.
Así que usted necesita para comprobar savedInstanceState
antes:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.question_layout, container, false); if (savedInstanceState!=null){ // restore your state from "savedInstanceState" } else{ CONST_TYPE = getArguments() != null ? getArguments().getInt(PASSED_INT) : 7; } }
Si alguien se enfrenta a algún problema, es causa de uso si la sentencia en el adaptador, simplemente se puede utilizar si sólo sin otro
Ejemplo que utilizo si sólo
if (Questions.get(position).user.userimageURL != null) { if (!Questions.get(position).user.getUserimageURL().isEmpty()) { //holder.userimageprog.setVisibility(View.VISIBLE); holder.imageView.setImageUrl(Profile_Fragment.BASE_URL + Questions.get(position).user.getUserimageURL(), _ImageLoader); } } else{ // I should use else statement as well }
- Firebase para cargar más elementos en desplazamiento (Android)
- Cuando se ejecuta en Nougat, ¿por qué el título se corta cuando se utiliza un CollapsingToolbarLayout?