快速信息
我正在关注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
答案 0 :(得分:0)
感谢@Divyesh,我找到了解决问题的方法。
创建自定义ArrayAdapter可以解决这个问题:
data_view.xml
DataItem
构造为listFromDB
。ArrayAdapter
并在data_view.xml
充气后将值分配给TextView。MainActivity
中使用了新的自定义适配器,列表中的项目已分配给相应的TextViews 以下是我将在稍后重构的上述步骤的示例。
<强> 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