Пользовательские представления Android против раздувания xml

У меня простой вопрос:

Не могли бы вы дать мне несколько советов по использованию Custom views vs Layout inflater для выполнения кода? Какой из них более предпочтительнее использовать? Может ли кто-нибудь объяснить мне «за» и «против» обоих.

Если мой вопрос не ясен, ниже приведен пример, который объясняет. Объявите это следующим образом:

public class Shortcut extends RelativeLayout{
    private Button btn; 
    private TextView title;


/*some getters & setters here*/


    public Shortcut(Context context){
       LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       View v = inflater.inflate(R.layout.shortcut, /*other params*/);
       title = v.findViewById(R.id.title);
       btn = v.findViewById(R.id.btn);
    }

}

И используйте его вот так:

public class MainActivit extends Activity{
ListView list = new ListView();

public void onCreate(Bundle...){
    ......
    list.setAdapter(new MyAdapter());
}    
// some code here 

private class MyAdapter extends BaseAdapter{

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Shortcut shortcut = new Shortcut(this);
        shortcut.setBtnText("i'm btn");
        shortcut.setTitle("btn1");
        return shortcut;
    }
}

Или так:

public class MainActivit extends Activity{
ListView list = new ListView();

public void onCreate(Bundle...){
    ......
    list.setAdapter(new MyAdapter());
}    
// some code here 

private class MyAdapter extends BaseAdapter{

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
          View view = convertView;
          if (view == null) {
              view = inflater.inflate(R.layout.shortcut, parent, false);
          }          
          TextView title = (TextView) view.findViewById(R.id.title);
          Button btn = (Button) view.findViewById(R.id.btn);
          title.setText("Hey!");
          btn.setText("smth");
           return view;
    }
}

Извините, если у меня есть некоторые ошибки в моем коде, я напечатал. он просто здесь без проверки орфографии или синтаксиса.

0
nl ja de

2 ответы

Я предпочитаю первый путь (пользовательские представления), потому что это означает, что все операции findViewById() уже учтены, что делает ваш код немного опрятным.

В соответствии с вашим примером:

Shortcut shortcut = new Shortcut(this);
shortcut.setBtnText("i'm btn");
shortcut.setTitle("btn1");

для меня намного более аккуратный, чем:

view = inflater.inflate(R.layout.shortcut, parent, false);
TextView title = (TextView) view.findViewById(R.id.title);
Button btn = (Button) view.findViewById(R.id.btn);
title.setText("Hey!");
btn.setText("smth");
3
добавлено

Когда использовать какой?

Всякий раз, когда вы чувствуете, что это вам подходит.

В чем разница между ними?

Ничего. На самом деле, нет. Вы используете тот же код в другом классе.

Почему вы думаете, что метод отличается?

Единственное отличие состоит в class , что у вас будет немного больше модульности. Теперь вы можете создавать несколько копий в любой деятельности. Но на самом деле это просто то, что чувствует себя лучше.

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)