Как вставить разные лоты с 6 фрагментами и 1 упражнением - PullRequest
0 голосов
/ 15 сентября 2018

У меня много данных в String.xml, и у меня есть одно действие и я использую RecyclerView (16 imageView) при нажатии на тему, предназначенную для другого действия, и в этом действии у меня есть макет вкладок с 6 вкладками (фрагменты) . Дизайн фрагмента для 16 imageView такой же! но данные разные ... Как я устанавливаю все данные (String в textView) с одним Activity и 6 Фрагментами и 6 Data Model Class для Темы. Tnx

Код намерения Для другого действия При нажатии на imageView в RecyclerView

 personalityTypeAdapter = new PersonalityTypeAdapter(PersonalityTypeActivity.this, getPersonalityPosts(), new PersonalityTypeAdapter.personalityTypeAdapterListener() {
      @Override
      public void onPostClicked(Personality personality) {
        //Toast.makeText(getApplicationContext(), "Post clicked! " + personality.getImageUrl(), Toast.LENGTH_SHORT).show();

        Intent intent = new Intent(PersonalityTypeActivity.this, PersonalityDetailsActivity.class);
          startActivity(intent);


      }
    });
    recyclerView.setAdapter(personalityTypeAdapter);

  }

Один из 6-го фрагмента

public class GeneralFragment extends Fragment {

  private General general;

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


  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    FragmentGeneralBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_general,
      container, false);


    //Just Test
    View view = binding.getRoot();
    general = new General(String.valueOf(Html.fromHtml(getString(R.string.text_content_about_mbti))),
      "http://static.talentyab.com/upload/blog_images/ESFJ.png");
    binding.setGeneral(general);

    return view;
  }


}

Модель данных одной из тем

public class General {
  private String general;
  private String imageUrl;

  public General(String general, String imageUrl) {
    this.general = general;
    this.imageUrl = imageUrl;
  }

  @BindingAdapter("imageUrl")
  public static void loadImage(ImageView view, String imageUrl) {
    Glide.with(view.getContext())
      .load(imageUrl)
      .apply(new RequestOptions().placeholder(R.drawable.image).error(R.drawable.image_broken_variant))
      .into(view);

  }

  public String getGeneral() {
    return general;
  }

  public void setGeneral(String general) {
    this.general = general;
  }

  public String getImageUrl() {
    return imageUrl;
  }

  public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
  }
}

Я тоже использую DataBinding :) Если вы хотите любой код, я готов поставить тему. Тпй

enter image description here

нажмите на картинку

перейти на эту страницу с 6 вкладками

enter image description here

1 Ответ

0 голосов
/ 16 сентября 2018

Я нашел свое решение :) Я не использую фрагмент ... Просто измените ViewPagerAdapter.

ViewPagerAdapter.java

public class ViewPagerAdapter extends PagerAdapter {


    private static final String TAG = "ViewPagerAdapter";

    private Context context;
    private List<PersonItem> personItemList;

    public ViewPagerAdapter(Context context, List<PersonItem> personItemList) {
        this.context = context;
        this.personItemList = personItemList;
    }


    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }


    @Override
    public int getCount() {
        return personItemList.size();
    }


    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View) object);
    }


    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return personItemList.get(position).getToolbarTitle();
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {

        LayoutInflater inflater = LayoutInflater.from(context);
        ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.fragment_layout, container, false);
        PersonItem personItem = personItemList.get(position);

        ImageView imgPerson = layout.findViewById(R.id.img_person);
        TextView txtPersonContent = layout.findViewById(R.id.txt_person_content);

        if (personItem.getImageUrl() != null) {
            Glide.with(context)
              .load(personItem.getImageUrl())
              .into(imgPerson);
        } else {
            imgPerson.setVisibility(View.GONE);
        }


        if (personItem.getContent() != null) {
            txtPersonContent.setText(personItem.getContent());
        }

        container.addView(layout);

        return layout;
    }
}

и используйте One Layout.xml и несколько String-массивов в res ... и я наконец-то установил данные во вкладках :) Happy code

...