将列表转换为从SQLite

时间:2016-12-29 05:38:58

标签: java android sqlite android-studio

快速信息

我正在关注Lynda.com上的一个名为App Development with Local Storage的示例视频。我有运动文件,但我试图按照自己的设置进行操作。

数据库设置

正在创建数据库,然后使用List对象将所有数据填充到DataItem元素的Cursor接口。 DataItem是实现Parcelable的模型类,用于使用setter和getter对SQL数据建模。这是我对课程的有限理解,这可能是问题的原因。

当前设置

我从标准导航抽屉创建了一个新的活动,我正在尝试将数据库(正确创建并经过测试)显示在位于list_view的{​​{1}}。

问题

我的问题在于不知道在content_main.xml中确切包含哪些内容。

ArrayAdapter

正如我所提到的,listFromDB = maSource.getAllItems(); ArrayAdapter<String> arrayAdapter; arrayAdapter = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1, **?listFromDB?**); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(arrayAdapter); 是包含数据库的类型列表。将其输出到logcat将产生4列和2行。

  

12-29 00:36:40.977 6326-6326 /? d / DBINFO:   [DataItem的{帐户ID =&#39; 6d8bb011-bd9a-4c71-b4c7-2ddaa5fe6fce&#39 ;,   accountName =&#39;第1行&#39;,说明=&#39;信息关于第1行&#39;,balance = 1903.59},   的DataItem {帐户ID =&#39; b6d08c68-d41d-4821-b901-23e7f38cebd9&#39 ;,   accountName =&#39;第2行&#39;,说明=&#39;信息关于第2行&#39;,balance = 41.28}]

     

[12-29 00:36:41.097 6326:6326 D /]

     

HostConnection :: get()建立新主机连接0xb7aba1b0,tid 6326

1 个答案:

答案 0 :(得分:0)

感谢@Divyesh,我找到了解决问题的方法。

创建自定义ArrayAdapter可以解决这个问题:

  1. 创建其他布局视图以包含所需的小部件。在data_view.xml
  2. 下我的案例中创建了3个TextView
  3. 创建了一个列表解析器,用于从数据库中找到的每一行中提取数据,并将DataItem构造为listFromDB
  4. 然后定义了自定义适配器,扩展了ArrayAdapter并在data_view.xml充气后将值分配给TextView。
  5. 最后,MainActivity中使用了新的自定义适配器,列表中的项目已分配给相应的TextViews
  6. 以下是我将在稍后重构的上述步骤的示例。

    <强> data_view.xml

    <TextView
        android:id="@+id/accountName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Account Name" />
    <TextView
        android:id="@+id/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Description" />
    <TextView
        android:id="@+id/balance"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Balance" />
    

    <强> ListParser

    public class ListParser {
        public String accountName;
        public String description;
        public String balance;
    
        public ListParser(String accountName, String description, String balance) {
            this.accountName = accountName;
            this.description = description;
            this.balance = balance;
        }
    }
    

    自定义适配器

    public class AccountAdapter extends ArrayAdapter<ListParser> {
        public AccountAdapter(Context context, ArrayList<ListParser> users) {
            super(context, 0, users);
        }
    
        public static class ViewHolder {
            TextView accountName;
            TextView description;
            TextView balance;
    
            public ViewHolder(View convertView) {
                 accountName = (TextView) convertView.findViewById(R.id.accountName);
                 description = (TextView) convertView.findViewById(R.id.description);
                 balance = (TextView) convertView.findViewById(R.id.balance);
            }
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // Get the data item for this position
            ListParser user = getItem(position);
            // Check if an existing view is being reused, otherwise inflate the view
            ViewHolder viewHolder;
            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.account_view, parent, false);
                viewHolder = new ViewHolder(convertView);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder)convertView.getTag();
            }
    
            // Lookup view for data population
            TextView accountName = viewHolder.accountName;
            TextView description = viewHolder.description;
            TextView balance = viewHolder.balance;
            // Populate the data into the template view using the data object
            accountName.setText(user.accountName);
            description.setText(user.description);
            balance.setText(user.balance);
            // Return the completed view to render on screen
            return convertView;
        }
    }
    

    MainActivity (单行)

    ArrayList<ListParser> arrayOfListParsers = new ArrayList<ListParser>();
    AccountAdapter adapter = new AccountAdapter(this, arrayOfListParsers);
    ListView listView = (ListView) findViewById(R.id.list_view);
    listView.setAdapter(adapter);
    
    ListParser newUser = new ListParser(String.valueOf(listFromDB.get(0).getaccountName()), String.valueOf(listFromDB.get(0).getDescription()), String.valueOf(listFromDB.get(0).getBalance()));
    adapter.add(newUser);
    

    需要为MainActivity类做更多的工作,但这只是一次测试。

    额外学分:https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView