将子项添加到 Android 中的列表视图

编程入门 行业动态 更新时间:2024-10-22 15:34:22
本文介绍了将子项添加到 Android 中的列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我目前有一个包含几个字符串的列表视图.这些是从 strings.xml 中的字符串数组调用的

I currently have a listview which contains a couple of strings. These are called from a string array in strings.xml

<string name="app_name">Taxi Me</string> <string-array name="taxi_array"> <item>Barrys Taxi</item> <item>Boom Taxi</item> </string-array>

我想做的是为这些创建子项目,以便我可以显示地址和联系方式等字段.我不久前制作了一个自定义列表视图,但无法弄清楚如何使用 strings.xml 文件进行操作?是否有我需要使用的特定标签以便它们显示在列表视图中?

What I was trying to do is create subitems for these so that i can show fields such as address and contact details etc. I made a customlistview a while back but cant work out how I can do it using the strings.xml file? Are there any particular tags I need to use so they show up in the list view?

主要活动代码:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final String[] taxi = getResources().getStringArray(R.array.taxi_array); final String[] address = getResources().getStringArray(R.array.taxi_add); setListAdapter(new ArrayAdapter<String>(this, R.layout.listtaxi, taxi)); final ListView lv = getListView(); lv.setTextFilterEnabled(true); for (int i = 0; i < taxi.length; i++) { lv.add(new ListTaxi (taxi[i], address[i])); } /*lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // When clicked, show a toast with the TextView text Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_LONG).show(); } }); */ lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, final int position, long id) { final int selectedPosition = position; AlertDialog.Builder adb=new AlertDialog.Builder(ListTaxi.this); adb.setTitle("Taxi Booking"); adb.setMessage("You Have Selected: "+lv.getItemAtPosition(position)); adb.setPositiveButton("Book", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent intent = new Intent(getApplicationContext(), Booking.class); intent.putExtra("booking", taxi[selectedPosition]); startActivity(intent); } }); adb.setNegativeButton("Cancel", null); adb.show(); } });

推荐答案

好的,只是为了踢球,我把它放在一起.它可以正确编译和运行,看看您是否可以根据您的特定需求进行调整:

Okay, just for kicks, I threw this together. It compiles and functions correctly, see if you can adapt it for your particular needs:

layout/taxi_list_item.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="schemas.android/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:padding="10dp" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/taxi_name" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/taxi_address" /> </LinearLayout>

layout/main.xml

<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="schemas.android/apk/res/android" android:id="@+android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" />

TaxiMain.java

package com.test.taxi; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; public class TaxiMain extends ListActivity { /** Called when the activity is first created. * @return */ class Taxi { private String taxiName; private String taxiAddress; public String getName() { return taxiName; } public void setName(String name) { taxiName = name; } public String getAddress() { return taxiAddress; } public void setAddress(String address) { taxiAddress = address; } public Taxi(String name, String address) { taxiName = name; taxiAddress = address; } } public class TaxiAdapter extends ArrayAdapter<Taxi> { private ArrayList<Taxi> items; private TaxiViewHolder taxiHolder; private class TaxiViewHolder { TextView name; TextView address; } public TaxiAdapter(Context context, int tvResId, ArrayList<Taxi> items) { super(context, tvResId, items); this.items = items; } @Override public View getView(int pos, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.feed_view, null); taxiHolder = new TaxiViewHolder(); taxiHolder.name = (TextView)v.findViewById(R.id.taxi_name); taxiHolder.address = (TextView)v.findViewById(R.id.taxi_address); v.setTag(taxiHolder); } else taxiHolder = (TaxiViewHolder)v.getTag(); Taxi taxi = items.get(pos); if (taxi != null) { taxiHolder.name.setText(taxi.getName()); taxiHolder.address.setText(taxi.getAddress()); } return v; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String[] taxiNames = getResources().getStringArray(R.array.taxi_name_array); String[] taxiAddresses = getResources().getStringArray(R.array.taxi_address_array); ArrayList<Taxi> taxiList = new ArrayList<Taxi>(); for (int i = 0; i < taxiNames.length; i++) { taxiList.add(new Taxi(taxiNames[i], taxiAddresses[i])); } setListAdapter(new TaxiAdapter(this, R.layout.taxi_list_item, taxiList)); } }

_____END EDIT_______

_____END EDIT_______

对于这样的事情,您可能最好使用数据库,以将记录联系在一起.如果你开始使用数组,你可以做的一件事是为你需要的每个项目创建一个单独的数组(例如出租车数组、出租车地址数组、出租车电话数组),然后在你的代码中创建一个出租车对象:

You'd probably be better off using a database for something like this, to keep the records tied together. If you're set on using arrays, one thing you could do is make a separate array for each item you need (e.g. taxi_array, taxi_address_array, taxi_phone_array) then make a Taxi object in your code:

class Taxi { String taxiName; String taxiAddress; String taxiPhone; public Taxi(String name, String address, String phone) { taxiName = name; taxiAddress = address; taxiPhone = phone; } } private List<Taxi> taxiList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String[] taxiNames = getResources().getStringArray("taxi_array"); String[] taxiAddresses = getResources().getStringArray("taxi_address_array"); String[] taxiPhones = getResources().getStringArray("taxi_phone_array"); taxiList = new ArrayList<Taxi>(); for (int i = 0; i < taxiNames.length; i++) { taxiList.add(new Taxi(taxiNames[i], taxiAddresses[i], taxiPhones[i])); } }

(这是未编译的代码,可能需要进行一些调整)但是您将有一个出租车项目列表,其中包含来自不同数组的所有编译信息.数据库仍然是更好的选择(甚至是包含数据的 CSV 文件,位于您的资产中).

(This is uncompiled code, some tweaks may be needed) But then you'll have a List of Taxi items, containing all of the compiled information from the different arrays. A database would still be a much better option (or even a CSV file with the data, in your assets).

更多推荐

将子项添加到 Android 中的列表视图

本文发布于:2023-11-23 15:54:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1622029.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   列表   将子项   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!