所以我想创建一个包含多个列的列表视图。我已经成功地称为数据库,但布局仍然不起作用。我认为这是因为我的所有数据都放在一个数组中,很难将它们分成三列。谁能为我找到解决方案?
我的程序结果在listview中是这样的:
John Doe 12 Argentina
Marilyn Rose 32 Russia
Annabella 19 United States
然而我想要的更像是这样:
John Doe 12 Argentina
Marilyn Rose 32 Russia
Annabella 19 United States
根据我的阅读,我们需要2个XML。一个用于列表视图,另一个用于布局(在文本之间留出空间)。一个.JAVA称为适配器来连接我的MainActivity.java和布局XML。
添加: 我已经尝试过使用两个XML。一个XML,我们称之为main.XML用于调用ListView。而grid.XML,就是把我放到android:layout_alignParentLeft =" true" (创造空间)。 我使用MyAdapter.JAVA来转换grid.XML中的视图。在MainActivity.JAVA中,我称之为MyAdapter。但是,当我将MainActivity中的代码连接到MyAdapter时,我的代码就会出错。
这是我的代码,它给出了java.lang.RuntimeException错误。所以我不得不删除它..有关它的更多信息,请检查最后两个代码......
MainActivity.java(错误)
public static ArrayList<String> arraydealer = new ArrayList<String>();
MyAdapter bohwat = new MyAdapter(MainActivity.this, arraydealer);
lvcustom.setAdapter(bohwat);
这是代码运行良好。它使用类MainActivity,AstraDB和MySetGet,以及main.XML。其他不起作用的类是MyAdapter和grid.xml
这就是我调用数据库的方式:
public class MainActivity extends Activity
{
public static ArrayList<String> arraydealer = new ArrayList<String>();
AstraDB astrahandler = new AstraDB(this);
Spinner spDealer;
ListView lvcustom;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lvcustom = (ListView)findViewById(R.id.custom_lv);
ShowListView();
}
private void ShowListView()
{
astrahandler.getAllDealer();
ArrayAdapter<String> adapt = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, arraydealer);
lvcustom.setAdapter(adapt);
}
}
AstraDB中的Activity和String名称中的ArrayList代码对于将MainActivity与数据库连接非常重要,但这似乎在布局中造成了麻烦。因为它们包含在一个数组中
这是获取我的数据库中所有数据的功能。它在AstraDB.java上:
public List<MySetGet> getAllDealer()
{
List<MySetGet> info = new ArrayList<MySetGet>();
db = DBHelper.getReadableDatabase();
// Select All Query
String selectQuery = "SELECT * FROM Dealer";
cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
MySetGet lets = new MySetGet();
lets.setDealerID(Integer.parseInt(cursor.getString(0)));
lets.setDealerName(cursor.getString(1));
lets.setDealerOwner(cursor.getString(2));
lets.setDealerWil(cursor.getString(3));
String name = cursor.getInt(0) +
"\u00A0 "+ cursor.getString(1)+
"\u00A0 "+ cursor.getString(2)+
"\u00A0 "+ cursor.getString(3);
MainActivity.arraydealer.add(name);
//add
info.add(lets);
} while (cursor.moveToNext());
}
// closing connection
cursor.close();
db.close();
//return contentdealer;
return info;
}
getAllDealer()中的MySetGet与MySetGet.java连接,我在其中放置了setter和getter,因此数据可以成为对象。这更像是这样:
public int getDealerID(){ return DealerID;}
public void setDealerID(int DealerID) { this.DealerID = DealerID; }
使用Java连接其他XML但仍然出错的代码:
grid_dealer.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_height="wrap_content"
android:layout_width="50dp"
android:id="@+id/col1"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:text=""/>
<TextView
android:layout_height="wrap_content"
android:layout_width="100dp"
android:id="@+id/col2"
android:layout_toRightOf="@id/col1"
android:layout_centerVertical="true"
android:text=""/>
public class MyAdapter extends BaseAdapter
{
Context context;
ArrayList<MySetGet> dealerlist;
public MyAdapter(Context context, ArrayList<MySetGet>list)
{
this.context = context;
dealerlist = list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
MySetGet yay = dealerlist.get(position);
//this is to customize the layout of the listview
if(convertView == null)
{
LayoutInflater inflater = null;
inflater = (LayoutInflater)context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.grid_dealer, null);
}
TextView tvID = (TextView)convertView.findViewById(R.id.col1);
tvID.setText(yay.getDealerID());
TextView tvName = (TextView)convertView.findViewById(R.id.col2);
tvName.setText(yay.getDealerName());
TextView tvOwner = (TextView)convertView.findViewById(R.id.col3);
tvOwner.setText(yay.getDealerOwner());
return convertView;
}
}
请帮帮我。我对此很新。有没有办法修改我的代码而不会改变我调用数据库的方式?下面的类和XML在显示数据库时工作正常,但没有在列之间创建整洁的布局空间 工作类:AstraDB,MainActivity,MySetGet 使用XML:main.xml 对不起,如果帖子变长了。我想澄清一些事情,以免产生误解。
答案 0 :(得分:1)
您可以使用android:layout_weight=""
来更好地安排观看次数
答案 1 :(得分:0)
在您的情况下,使用SimpleCursorAdapter
是理想的解决方案。请查看教程here,该教程将指导您完成实现目标的步骤。
答案 2 :(得分:0)
在simple_list_item_1
布局中,如果您相对于彼此安排项目,您将获得现在获得的结果。如果您想要正确的格式,请分别使用android:layout_alignParentLeft="true"
,android:centerHorizontal="true"
和android:layout_alignParentRight="true"
将元素关联到左侧,中间和右侧