как использовать ArrayAdapter в android пользовательских объектов

Как я могу использовать свойства настраиваемого объекта в Listview. Если я реализую ArrayAdapter со списком строк, он отлично отображается в Listview, но когда я использую список пользовательских объектов, он просто выводит адрес памяти.

Код, который у меня есть до сих пор:

ArrayList allObjects = new ArrayList(); allObjects.add("title", "http://url.com")); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, allNews); // Assign adapter to ListView listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Uri uri = Uri.parse( "http://www.google.com" ); startActivity(new Intent(Intent.ACTION_VIEW, uri)); } }); 

Здесь есть аналогичный вопрос, но это не то, что мне нужно, так как мне просто нужно показать название в виде списка и когда они нажимают на извлечение URL-адреса.

    ArrayAdapter отображает значение, возвращаемое методом toString() , поэтому вам нужно переопределить этот метод в вашем пользовательском classе Object, чтобы вернуть нужную строку. Вам также необходимо иметь хотя бы метод getter для URL-адреса, поэтому вы можете получить его в событии click.

     public class NewsObject { private String title; private String url; public NewsObject(String title, String url) { this.title = title; this.url = url; } public String getUrl() { return url; } @Override public String toString() { return title; } ... } 

    В onItemClick() position будет индексом в ArrayList ваших пользовательских объектов, соответствующих выбранному элементу списка. Получите URL-адрес, проанализируйте его и вызовите startActivity() .

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { NewsObject item = allNews.get(position); String url = item.getUrl(); Uri uri = Uri.parse(url); startActivity(new Intent(Intent.ACTION_VIEW, uri)); } }); 

    Обратите внимание: я предположил, что ваш пользовательский class – NewsObject , так как это то, что используется с вашим примером адаптера.

    Если вы хотите использовать методы своего пользовательского classа, вам нужно реализовать class ArrayAdapter custor … Как его создать?

    Первый шаг

    Получите ваш проект и создайте новый class. Затем расширяет class с помощью ArrayAdapter{} и объявляет внутри ваших атрибутов, которые вам нужны … Мой пример:

     public class Room_Adapter extends ArrayAdapter { //Declaration of Atributes private ArrayList Rooms_Array; private final Activity context; private final ListView lvBuinding; 

    второй

    Объявите конструктор для этого classа, всегда вам нужен Activity и ArrayList, если вы захотите … В моем случае мне нужен список … Мой пример:

     public Room_Adapter(Activity context, ArrayList Rooms_Array,ListView lvBuinding) { super(context, R.layout.room_layout, Rooms_Array); this.context = context; this.Rooms_Array = Rooms_Array; this.lvBuinding = lvBuinding; } 

    Супер метод – это ваша деятельность, настраиваемый макет (если он у вас есть) и ваш массив.

    В третьих

    Объявите статический class или создайте новый, если у вас есть настраиваемый макет строки. Мой пример имеет статический class:

     public static class Room_View{ //Declaration of Atributes TextView RoomName; ImageView RoomState; TextView NoTroubles; Button btnRoomRow; ImageButton btnShowRoomTasks; ImageButton btnAddTasks; RelativeLayout RowLayout; } 

    четвертый

    Переопределить метод getView.

     @Override public View getView(int position, View ConvertView, ViewGroup parent) { //Declaration of Variables Room_View rowView; //Custom static class with controls LayoutInflater inflator = context.getLayoutInflater(); if (ConvertView == null) { rowView = new Room_View(); ConvertView = inflator.inflate(R.layout.room_layout,null,true); //Inflate your view with your custom view. rowView.RoomName = (TextView) ConvertView.findViewById(R.id.txtvRoom); rowView.RoomState = (ImageView) ConvertView.findViewById(R.id.ivRoomState); rowView.NoTroubles = (TextView) ConvertView.findViewById(R.id.txtvNoTroubles); rowView.btnRoomRow = (Button) ConvertView.findViewById(R.id.btnRoomRow); rowView.btnAddTasks = (ImageButton) ConvertView.findViewById(R.id.btnAddTask); rowView.btnShowRoomTasks = (ImageButton) ConvertView.findViewById(R.id.btnShowRoomTasks); rowView.RowLayout = (RelativeLayout) ConvertView.findViewById(R.id.rowLayout); ConvertView.setTag(rowView); } else { rowView = (Room_View) ConvertView.getTag(); } //Here custom your control stats Room_Object Room = Rooms_Array.get(position); rowView.RoomName.setText(Room.getRoomName()); rowView.NoTroubles.setVisibility(View.INVISIBLE); rowView.btnShowRoomTasks.setClickable(true); rowView.btnShowRoomTasks.setImageResource(R.drawable.list_3a4b66_50); rowView.btnShowRoomTasks.setOnClickListener(OnShowTasksClickListener); //This is for add ClickListiner in my buttons... rowView.btnAddTasks.setOnClickListener(OnAddTasksClickListener); rowView.btnRoomRow.setOnClickListener(OnAddTasksClickListener); if(Room.getStatus().equals("Checked")){ rowView.RowLayout.setBackgroundColor(0xFFC7E6C7); rowView.btnShowRoomTasks.setClickable(false); rowView.btnShowRoomTasks.setImageResource(R.drawable.list_999999_50); rowView.RoomState.setImageResource(R.drawable.check_3ebf4b_50); } else if(Room.getStatus().equals("Blocked")){ rowView.RowLayout.setBackgroundColor(0xFFDBC3E5); rowView.RoomState.setImageResource(R.drawable.key_9330e0_50); } else if(Room.getStatus().equals("Dirty")){ rowView.RowLayout.setBackgroundColor(0xfffceedb); rowView.RoomState.setImageResource(R.drawable.icon_housekeeping_3_yellow); } else if(Room.getStatus().equals("Troubled")){ rowView.RowLayout.setBackgroundColor(0xFFF4CECD); rowView.RoomState.setImageResource(R.drawable.wrench_eb3232_50); rowView.NoTroubles.setVisibility(View.VISIBLE); try { rowView.NoTroubles.setText(Integer.toString(Room.getNoTasks())); } catch (Exception ex){ Log.e("-- Error --",ex.getMessage()); } } // //Pay attention ************************************************* // //Now if you needs to use your custom external class this is the site, now imagine that you need gets string from your custom class in the text view, then: //Declare class CustomClass object = new CustomClass(); rowView.(CUSTOM CONTROL FROM YOUR STATIC CLASS).(METHOD OF CONTROL)(object.(CUSTOM METHOD OF YOUR OBJECT)); //For example If you follows my sample then: rowView.NoTroubles.setText(object.getNumberOfTroubles().toString); return ConvertView; } //Listener Methods for my button controls private View.OnClickListener OnShowTasksClickListener = new View.OnClickListener() { @Override public void onClick(View v) { int positionSelected = lvBuinding.getPositionForView((View) v.getParent()); int totalRooms = lvBuinding.getCount() - 1; int actualRoom = totalRooms - positionSelected; try{ //Your code; } catch (Exception ex){ Log.e("-- CustomError --", ex.getMessage()); } } }; private View.OnClickListener OnAddTasksClickListener = new View.OnClickListener() { @Override public void onClick(View v) { int positionSelected = lvBuinding.getPositionForView((View) v.getParent()); int totalRooms = lvBuinding.getCount() - 1; int actualRoom = totalRooms - positionSelected; try{ //Your code; } catch (Exception ex){ Log.e("-- CustomError --", ex.getMessage()); } } }; } 

    Я думаю, что это то, что вам нужно, если вам нужна дополнительная информация или тот же совет, и я стараюсь помочь вам … Удачи, Эдуардо!

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { CustomObject obj = allObjects.get(position); //Now use obj to access the property Uri uri = Uri.parse( "http://www.google.com" ); startActivity(new Intent(Intent.ACTION_VIEW, uri)); } }); 

    Вам необходимо переопределить getView вашего адаптера, чтобы отобразить отдельный объект в позиции в вашем представлении.

    Interesting Posts

    Объявление переменных внутри оператора switch

    vs

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

    Является ли целостность флеш-памяти зависящей от системных ресурсов при чтении / записи (например, CD / DVD)?

    Что такое стиль без точек в функциональном программировании?

    Android ExpandableListView – Поиск учебника

    Как получить данные из каждого динамически созданного EditText в Android?

    Понимание того, что требуется для удаления хеша # из угловых маршрутов

    Как разработать расширяемое программное обеспечение (архитектура плагина)?

    Как изменить текст на панели действий

    Визуальная топологическая карта сети?

    Каковы некоторые лучшие практики и «эмпирические правила» для создания индексов базы данных?

    Каков наилучший метод для принудительного истечения кеша в ASP.NET?

    Изменить настройку языка Safari? (Mac OS X)

    Ошибка: неожиданный символ / ввод / строка константа / числовая константа / SPECIAL в моем коде

    Давайте будем гением компьютера.