簡體   English   中英

Android-ListView顯示為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM