Как сделать один шаблон xml для разных ссылок

подскажите пожалуйста как мне мделать один фрагмент с картинкой и описанием. У меня есть 15 кнопок при нажатии на них нужно чтоб открывался один макет или шаблон, но с разной информацией которая соответствует нажатой кнопке


Ответы (1 шт):

Автор решения: Kostia

Как насчёт динамического дизайна? Для этого создайте контейнер в вашем главном xml файле Пример:

<LinearLayout
        android:id="@+id/linear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    </LinearLayout>

Далее вам нужен xml для вашего фрагмента, в него поместите картинку и текст. Пример:

<TextView
    android:textSize="20sp"
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="35sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ImageView
    android:id="@+id/faceView"
    android:layout_width="70sp"
    android:layout_height="70sp"
    app:layout_constraintTop_toTopOf="@+id/view_friend"
    app:layout_constraintBottom_toBottomOf="@+id/view_friend"
    app:layout_constraintEnd_toEndOf="@+id/view_friend" />

Теперь опишите класс для фрагмента. В нём разместите конструктор который будет принимать ваш текст и картинку(ну или ссылку на картинку) Так же в метод public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) добавьте все нужные строки что бы текст установился в ваш TextView и вставлялась картинка.

public class FriendView extends Fragment {
ImageView faceView;
TextView textView;
String nickname;
Drawable d;
Handler handler;

public FriendView(String nickname, Drawable d){
    this.nickname = nickname;
}

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.view_friend, container, false);
    textView1 = (TextView)root.findViewById(R.id.textView);
    faceView = (ImageView)root.findViewById(R.id.faceView);
    textView1.setText("  "+nickname);
    return root;
}

P.S под загрузку картин лучше создавать новый поток. Теперь вернёмся к основной активности Инициализируйте ваш контейнер:

friendsContainer = (LinearLayout)root.findViewById(R.id.linear);

Теперь создавайте нужный вам класс с вашими данными и добавляйте его в контейнер.

FriendView friendView = new FriendView(name, picture);    
FragmentManager fragMan = getFragmentManager();    
FragmentTransaction fragTransaction = fragMan.beginTransaction();    
fragTransaction.add(friendsContainer.getId(), friendView,"frag"); //frag - id    
fragTransaction.commit();    
→ Ссылка