【问题标题】:How to change simple_list_item_1 to modify list_item?如何更改 simple_list_item_1 来修改 list_item?
【发布时间】:2017-07-22 13:31:48
【问题描述】:

我想显示数据库中的3个字段,但我不知道simple_list_item_1

SQLiteDatabase db = dbcenter.getReadableDatabase();
    cursor = db.rawQuery("SELECT * FROM TABLE", null);
    daftar = new String[cursor.getCount()];
    cursor.moveToFirst();
    for (int cc = 0; cc < cursor.getCount(); cc++) {
        cursor.moveToPosition(cc);
        daftar[cc] = cursor.getString(1).toString();
    }
    ListView01 = (ListView) view.findViewById(R.id.listView1);
    ListView01.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, daftar));
    ListView01.setSelected(true);

在上面的视图中,代码显示了表格中的数据,但只出现了一个字段。

你能给我一个例子,用java代码将它替换为修改后的list_item 3 &lt;TextView&gt;

【问题讨论】:

    标签: android listview android-studio


    【解决方案1】:

    您可以使用 3 个文本视图创建自定义列表视图

    现在 custom_list_view 布局

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/name"
            android:text="@string/name"
            android:textSize="20sp"
            android:layout_marginTop="19dp"
            android:layout_alignParentTop="true"
            android:layout_toLeftOf="@+id/price"
            android:layout_toStartOf="@+id/price"
            android:layout_marginRight="30dp"
            android:layout_marginEnd="30dp"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/price"
            android:text="Price"
            android:textSize="20sp"
            android:layout_alignBaseline="@+id/name"
            android:layout_alignBottom="@+id/name"
            android:layout_centerHorizontal="true"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/stock"
            android:text="Stock"
            android:textSize="20sp"
            android:layout_alignBaseline="@+id/price"
            android:layout_alignBottom="@+id/price"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_marginRight="81dp"
            android:layout_marginEnd="81dp"/>
        </RelativeLayout>
    

    在布局中创建列表视图,我在 mainactivity 布局中创建

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.pro.salman.customlistview.MainActivity">
    
        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/list_item"/>
    
    </RelativeLayout>
    

    自定义列表视图类

    public class CustomListView extends BaseAdapter {
    
    
        private ArrayList<HashMap<String,String>> list;
        private LayoutInflater mLayoutInflater;
        private Context mContext;
    
        public CustomListView(ArrayList<HashMap<String,String>> list,Context c) {
            this.list = list;
            this.mContext = c;
            mLayoutInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
    
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        public Object getItem(int position) {
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
    
            View view = mLayoutInflater.inflate(R.layout.custom_list_view,parent,false);
            Holder h = new Holder();
    
                // set id's
            h.name = (TextView)(view.findViewById(R.id.name));
            h.price = (TextView)(view.findViewById(R.id.price));
            h.stock = (TextView)(view.findViewById(R.id.stock));
    
            HashMap<String,String> hashMap = new HashMap<>();
            hashMap = list.get(position);
    
            h.name.setText(hashMap.get("nameKey"));
            h.price.setText(hashMap.get("priceKey"));
            h.stock.setText(hashMap.get("stockKey"));
    
    
            return view;
        }
    
    
        private class Holder
        {
            TextView name;
            TextView price;
            TextView stock;
        }
    }
    

    现在在 mainactivity 类中

    public class MainActivity extends AppCompatActivity {
    
    private ListView mListView;
    private ArrayList<HashMap<String,String>> mArrayList;
    
    
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mArrayList = new ArrayList<HashMap<String, String>>();
    
        for(int i =0;i<20;i++)
        {
            HashMap<String,String> mHashMap = new HashMap<>();
            mHashMap.put("nameKey","name "+String.valueOf(i));
            mHashMap.put("priceKey","price "+String.valueOf(i));
            mHashMap.put("stockKey","stock "+String.valueOf(i));
    
            mArrayList.add(mHashMap);
        }
    
    
        mListView = (ListView)(findViewById(R.id.list_item));
    
        CustomListView customListView = new CustomListView(mArrayList,this);
        mListView.setAdapter(customListView);
    
    }
    }
    

    结果

    【讨论】:

      【解决方案2】:

      当您调用new ArrayAdapter(..., android.R.layout.simple_list_item_1, ...) 时,您是在告诉系统将android.R.layout.simple_list_item_1 用于您的数据。如果这不起作用,那么实际上只有一个选择:自己处理膨胀和填充视图。您可以通过创建 ArrayAdapter 的自定义子类并覆盖 onCreateView() 来做到这一点。

      官方文档:https://developer.android.com/reference/android/widget/ArrayAdapter.html

      您还可以自定义用于集合中数据对象的视图类型。要自定义用于数据对象的视图类型,请覆盖 getView(int, View, ViewGroup) 并扩充视图资源。

      【讨论】:

      • 你能给我一个例子,用 3 个 和 java 代码将它替换为修改后的list_item
      【解决方案3】:

      创建一个名为 custom_layout 的 xml

        <?xml version="1.0" encoding="utf-8"?>
        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
          android:textSize="16sp" >
        </TextView>
      

      使用类似 R.layout.custom_layout 而不是 android.R.layout.simple_list_item_1

      【讨论】:

      • 我想要 3 个 但是java的代码呢?可以举个例子吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 2011-02-11
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多