Mik*_*keT 1 android listview arraylist custom-adapter
我正在尝试列出具有从Shop类型填充的ArrayList中的列的行,这些列是从SQLite数据库中提取的.因此,我有一个自定义适配器.
但是,不会显示任何数据.没有错误消息或异常.
我使用过调试器(我使用的是Android Studio).我知道没有调用重写的getView方法(此方法中的断点未被触发).触发了构造函数中的断点,并且预期的数据位于ArrayList中.
ListView,已经用于其他方法(我已经从一个简单的列表中获得了一个字符串数组中的数据,它确认了现有数据的其他测试,例如对话框显示数据,使用ShopList的数据列表到一个简单的列表type,列出元素而不是数据).
rowview XML可能存在问题.
我非常感谢有人让我知道上述问题的代码(如下所示)有什么问题.即如果时间允许,为什么没有显示任何内容以及如何更正代码.
我想确认一下我看了很多关于这个的帖子并尝试了各种选项,你可以在代码中看到一些.
这是我认为相关的MainShopActivity的摘录(完整的代码是最后的,因为它很难看并且有很多代码被注释掉了).
ShopListArrayAdapter adapter = new ShopListArrayAdapter(this,shoplist);
//listview.setAdapter(adapter);
setListAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
这是ShopListArrayAdapter.
package mjt.shopper;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by Mike092015 on 1/02/2016.
*/
public class ShopListArrayAdapter extends ArrayAdapter<ArrayList<Shop>> {
private final Context context;
private final ArrayList<Shop> shoplist;
public ShopListArrayAdapter(Context context, ArrayList<Shop> shoplist) {
super(context, R.layout.activity_shop_list_entry);
this.context = context;
this.shoplist = shoplist;
}
@Override
public View getView(int position, View convertview, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.activity_shop_list_entry, parent, false);
TextView textViewShopName = (TextView) rowView.findViewById(R.id.shop_name_entry);
TextView textViewShopOrder = (TextView) rowView.findViewById(R.id.shop_order_entry);
TextView textviewShopStreet = (TextView) rowView.findViewById(R.id.shop_street_entry);
textViewShopName.setText(shoplist.get(position).getShopName());
textViewShopOrder.setText(shoplist.get(position).getShopOrderAsString());
textviewShopStreet.setText(shoplist.get(position).getShopstreet());
return rowView;
}
}
Run Code Online (Sandbox Code Playgroud)
这是ListeView XML activity_shop_list(ps我尝试删除了四个按钮,结果是相同的.).
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="mjt.shopper.ShopListActivity">
<Button
android:id="@+id/aslhbtn01"
android:layout_width="@dimen/standard_button_width"
android:layout_height="@dimen/standard_button_height"
android:text="@string/standarddonebutton"
android:textStyle="bold"
android:onClick="doneWithShops"/>
<Button
android:id="@+id/aslhbtn02"
android:layout_width="@dimen/standard_button_width"
android:layout_height="@dimen/standard_button_height"
android:layout_toEndOf="@id/aslhbtn01"
android:layout_toRightOf="@id/aslhbtn01"
android:text="@string/standardaddbuttontext"
android:textStyle="bold"
android:onClick="addShop"
/>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/aslhbtn01"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/list">
<Button
android:id="@+id/aslfbtn01"
android:layout_width="@dimen/standard_button_width"
android:layout_height="@dimen/standard_button_height"
android:text="@string/standarddonebutton"
android:textStyle="bold"
android:onClick="doneWithShops"/>
<Button
android:id="@+id/aslfbtn02"
android:layout_width="@dimen/standard_button_width"
android:layout_height="@dimen/standard_button_height"
android:layout_toEndOf="@id/aslfbtn01"
android:layout_toRightOf="@id/aslfbtn01"
android:text="@string/standardaddbuttontext"
android:textStyle="bold"
android:onClick="addShop"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
这是RowView XML activity_shop_list_entry
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ShopListEntryActivity">
<TextView
android:id="@+id/shop_name_entry"
android:layout_width="100sp"
android:layout_height="30sp"
android:textStyle="bold" />
<TextView
android:id="@+id/shop_order_entry"
android:layout_width="50sp"
android:layout_height="30sp" />
<TextView
android:id="@+id/shop_street_entry"
android:layout_width="300sp"
android:layout_height="30sp" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
最后是ShopListActivity的完整代码
package mjt.shopper;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import java.util.ArrayList;
public class ShopListActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shop_list);
int shopcount = 0;
// Need to access the shopper database
ShopperDBHelper shopperdb = new ShopperDBHelper(this, null, null,1);
// Check to see if we should have action buttons at top and bottom of the list
// if so then make the upper buttons invisible. Just in case if not then make
// them visible.
shopcount = shopperdb.numberOfShops();
if(shopcount < 10) {
findViewById(R.id.aslhbtn01).setVisibility(View.INVISIBLE);
findViewById(R.id.aslhbtn02).setVisibility(View.INVISIBLE);
} else {
findViewById(R.id.aslhbtn01).setVisibility(View.VISIBLE);
findViewById(R.id.aslhbtn02).setVisibility(View.VISIBLE);
}
// Call the getShops method setting an ArrayList with the returned ArrayList (list of Shop objects)
final ArrayList<Shop> shoplist = shopperdb.getShops();
//Testing ie display number of shops via both the numberOfShops method and via the ArrayList size method
// according to the ArrayList returned from the getShops method.
// numberOfShops method returns integer count
// getShops method returns an ArrayList of the Shop object per row, this containing all the data
String r; // initialise the string that is to be displayed
// Testing Add the number of shops extracted (both count methods as described above)
r = "Shop List Array contains " + shoplist.size() + " Elements.\nNumber of Shops returns "+shopcount+"\n";
// Alternative/check simplelistview compliant array
final String[] values = new String[shoplist.size()];
int ix = 0;
// Testing report on the contents of the returned list of Shops, also populate the simplelistview array
for(Shop shop : shoplist) {
values[ix++] = shop.getShopName();
r=r+"Shop Name="+shop.getShopName()+
" Order="+shop.getShopOrderAsString()+
" Street="+shop.getShopstreet()+
" City="+shop.getShopCity()+
" State="+shop.getShopstate()+
" Notes="+shop.getShopNotes()+
" DBID="+shop.getShopId()+
"\n\n";
}
// Testing report shop list according to the simplelistview array
r = r+"\n\nExtract Shop names are:";
for(int i=0;i < shoplist.size(); i++ ) {
r=r+"\n "+values[i];
}
// Build the simplelistview (ie just one column, the shop name)
/*WORKS but now trying arraylist adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,values);
final ListView listview = (ListView) findViewById(R.id.aslv01);
// Set up the onclick listener per list item
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(),"You Clicked on List Item #"+position+" Shop="+values[position]+". ALtMthd Shop="+shoplist.get(position).getShopName(),Toast.LENGTH_LONG).show();
}
});
listview.setAdapter(adapter);
*/
ShopListArrayAdapter adapter = new ShopListArrayAdapter(this,shoplist);
//listview.setAdapter(adapter);
setListAdapter(adapter);
// sort of works shows the id of the shoplist element but for all shops
//ArrayAdapter<Shop> adadpter = new ArrayAdapter<Shop>(this,android.R.layout.simple_list_item_1,shoplist);
//listview.setAdapter(adapter);
AlertDialog.Builder okdialog = new AlertDialog.Builder(this);
okdialog.setMessage(r);
okdialog.setCancelable(true);
okdialog.setPositiveButton("OK",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
okdialog.show();
}
public void doneWithShops(View view) { this.finish(); }
public void addShop(View view) {
ShopperDBHelper shopperdb = new ShopperDBHelper(this, null, null, 1);
final ArrayList<Shop> shoplist = shopperdb.getShops();
Intent intent = new Intent(this,ShopAddActivity.class);
startActivity(intent);
final String[] values = new String[shoplist.size()];
int ix = 0;
for(Shop shop : shoplist) {
values[ix++] = shop.getShopName();
}
//ArrayAdapter<String> adapter = new ArrayAdapter<String>(view.getContext(), android.R.layout.simple_list_item_1,values);
//@@@@@@@@ final ListView listview = (ListView) findViewById(R.id.aslv01);
//final ListView listview = (ListView) findViewById(R.id.aslv01);
}
Run Code Online (Sandbox Code Playgroud)
}
您没有将数据集提交给父类.更改
public ShopListArrayAdapter(Context context, ArrayList<Shop> shoplist) {
super(context, R.layout.activity_shop_list_entry);
Run Code Online (Sandbox Code Playgroud)
同
public ShopListArrayAdapter(Context context, ArrayList<Shop> shoplist) {
super(context, R.layout.activity_shop_list_entry, shoplist);
Run Code Online (Sandbox Code Playgroud)
当然shoplist必须包含条目,否则无论如何都不会显示.在调用setAdapter Androidcall之后ArrayAdapter.getCount,检查是否需要调用getView.由于您既没有明确地将数据集提供给父类也没有覆盖getCount,因此从AndroidPOV中您没有任何要显示的内容,getView因此不会调用ergo .
编辑
更改
public class ShopListArrayAdapter extends ArrayAdapter<ArrayList<Shop>> {
Run Code Online (Sandbox Code Playgroud)
同
public class ShopListArrayAdapter extends ArrayAdapter<Shop> {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |