[英]Android - ListView show empty
TestAdapter:
public class TestAdapter extends Activity
{
ArrayList<Horario> array = new ArrayList<Horario>();
protected static final String TAG = "DataAdapter";
private final Context mContext;
private SQLiteDatabase mDb;
private DataBaseHelper mDbHelper;
public TestAdapter(Context context)
{
this.mContext = context;
mDbHelper = new DataBaseHelper(mContext);
}
public TestAdapter createDatabase() throws SQLException
{
try
{
mDbHelper.createDataBase();
}
catch (IOException mIOException)
{
Log.e(TAG, mIOException.toString() + " UnableToCreateDatabase");
throw new Error("UnableToCreateDatabase");
}
return this;
}
public TestAdapter open() throws SQLException
{
try
{
mDbHelper.openDataBase();
mDbHelper.close();
mDb = mDbHelper.getReadableDatabase();
}
catch (SQLException mSQLException)
{
Log.e(TAG, "open >>"+ mSQLException.toString());
throw mSQLException;
}
return this;
}
public void close()
{
mDbHelper.close();
}
ArrayList<Horario> getorigem(){
String query = "select origem, destino From horarios";
Cursor cursor = mDb.rawQuery(query, new String[]{});
ArrayList<Horario> array = new ArrayList<Horario>();
while (cursor.moveToNext()) {
String _origem = cursor.getString(cursor.getColumnIndex("origem"));
String _destino = cursor.getString(cursor.getColumnIndex("destino"));
array.add(new Horario(_origem, _destino));
}
return array;
}
}
MainActivity(和MyListAdapter):
public class MainActivity extends Activity {
ArrayList<Horario> array = new ArrayList<Horario>();
SQLiteDatabase mDb;
Button bt_search;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_search = (Button) findViewById(R.id.btnsearch);
TestAdapter mDbHelper = new TestAdapter(getBaseContext());
mDbHelper.createDatabase();
bt_search.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
search(v);
}
});
}
public void search(View v) {
setContentView(R.layout.list_view);
TestAdapter mDbHelper = new TestAdapter(getBaseContext());
mDbHelper.open();
mDbHelper.getorigem();
ArrayAdapter<Horario> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.list_view);
list.setAdapter(adapter);
mDbHelper.close();
}
public void populateListView() {
// TODO Auto-generated method stub
MyListAdapter adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.list_view);
list.setAdapter(adapter);
}
private class MyListAdapter extends ArrayAdapter<Horario>{
public MyListAdapter() {
super(MainActivity.this, R.layout.item_view, array);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Make sure we have view to work with
View itemView = convertView;
if(itemView == null){
itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
}
//Find the car to work with.
Horario currentHorario = array.get(position);
//Fill the view
// Origem:
TextView makeText = (TextView) itemView.findViewById(R.id.view_origem);
makeText.setText(currentHorario.getOrigem());
// Destino:
TextView ConditionText = (TextView) itemView.findViewById(R.id.view_destino);
ConditionText.setText(currentHorario.getDestino());
return itemView;
}
}
}
我正在嘗試使用item_view.xml中的布局填充名為list_view的ListView。 當我單擊按鈕搜索以獲取結果時,不顯示任何錯誤,但list_view顯示為空
嘗試這個
public class MyListAdapter extends BaseAdapter{
public MyListAdapter(yourActivity, yourlayout, yourArray) {
//initialize here
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Make sure we have view to work with
View itemView = convertView;
if(itemView == null){
itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
}
//Find the car to work with.
Horario currentHorario = array.get(position);
//Fill the view
// Origem:
TextView makeText = (TextView) itemView.findViewById(R.id.view_origem);
makeText.setText(currentHorario.getOrigem());
// Destino:
TextView ConditionText = (TextView) itemView.findViewById(R.id.view_destino);
ConditionText.setText(currentHorario.getDestino());
return itemView;
}
@Override
public int getCount() {
return yourArray.size();
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
}
確保您具有:
@Override
public int getCount() {
return yourArray.size();
}
這部分代碼返回列表中將包含多少個單元格
MainActivity
onCreate(Bundle b)
在哪里
在MainActivity
onCreate(Bundle b)
方法中,您必須在setContentView(R.layout.ur_layout)
之后調用populateListView()
,並且不了解TestAdapter
為什么擴展了Activity
編輯: ur array
為空u忘記分配值
array = mDbHelper.getorigem();
您不需要此populateListView()
方法,因為您already referred the ListView in search(View v)
public void populateListView() {
// TODO Auto-generated method stub
MyListAdapter adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.list_view);
list.setAdapter(adapter);
}
MyListAdapter adapter = new MyListAdapter();
在search(View v)
移動此行search(View v)
嘗試使用ViewHolder Pattern進行平滑滾動
每次更新陣列列表時,您必須告訴適配器數據已更改。 在列表中設置數據后,在適配器上調用notifyDataSetChanged() 。
詳細信息http://developer.android.com/reference/android/widget/ArrayAdapter.html#notifyDataSetChanged()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.