Как сделать один шаблон xml для разных ссылок
подскажите пожалуйста как мне мделать один фрагмент с картинкой и описанием. У меня есть 15 кнопок при нажатии на них нужно чтоб открывался один макет или шаблон, но с разной информацией которая соответствует нажатой кнопке
Ответы (1 шт):
Как насчёт динамического дизайна? Для этого создайте контейнер в вашем главном 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();