【问题标题】:Android- Adding subrows to a ListView!Android- 向 ListView 添加子行!
【发布时间】:2011-01-03 23:58:47
【问题描述】:

我一直在尝试向列表视图添加子行。我有一个出租车应用程序,目前显示出租车公司名称列表,我希望能够添加一些显示地址、邮政编码等的子行。

我对此进行了一些尝试,但都没有成功。我从 strings.xml 文件中的数组调用我的字符串。我目前的代码是:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);       

    final String[] taxi = getResources().getStringArray(R.array.taxi_array);
    setListAdapter(new ArrayAdapter<String>(this, R.layout.listtaxi, taxi));

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);

        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(); 
         }
     });

如果有人能帮助我解决这个问题,将不胜感激。

我问的原始问题在这里:Android - Adding Subitem to a listview

谢谢

【问题讨论】:

    标签: android listview rows


    【解决方案1】:

    哎呀,刚刚注意到这个。我会将编辑后的答案粘贴到此处:

    好吧,只是为了好玩,我把这个放在一起了。它可以正确编译和运行,看看您是否可以根据您的特定需求对其进行调整:

    布局/taxi_list_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/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="http://schemas.android.com/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.taxi_list_item, 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));      
        }
    }
    

    【讨论】:

    • 我的错字。 :) 现在修复了,应该是taxi_list_item。粘贴了我另一个项目的一些代码。
    • 很抱歉,这很痛苦,但在我构建它之后它不会运行。当我加载它时说错误?当我在调试模式下运行它时找不到源。您是否有机会将其导出为 jar 并允许我在某处访问它?
    • 这对你没有帮助。错误是什么?尝试在 java 文件中按 Ctrl+Shift+O 以确保所有导入都在那里,并确保更改包以匹配您自己的包。要查找错误,窗口 > 显示视图 > 问题,或转到调试透视图并查看 LogCat。
    • 发现错误。由于某种原因,android清单没有改变。看起来很完美的伴侣!我假设我可以通过更改 main.xml 文件来更改它的布局?
    • 那会改变主视图,改变列表项的实际布局,修改taxi_list_item.xml。很高兴它的工作!
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多