Android 使用ArrayAdapter在ListView中逐行输出
我有一个适配器,它从“while”循环中获取第二个参数,因此它必须在ListView中显示查询结果,但它只显示变量“string\u word”的最后一个含义。但即使是log.d也会逐行输出我想要的内容。代码如下:Android 使用ArrayAdapter在ListView中逐行输出,android,listview,android-cursoradapter,Android,Listview,Android Cursoradapter,我有一个适配器,它从“while”循环中获取第二个参数,因此它必须在ListView中显示查询结果,但它只显示变量“string\u word”的最后一个含义。但即使是log.d也会逐行输出我想要的内容。代码如下: public class MainActivity extends Activity implements OnClickListener { final String LOG_TAG = "myLogs"; IdDB idh; SynDB sqh; SQLiteDatabase
public class MainActivity extends Activity implements OnClickListener {
final String LOG_TAG = "myLogs";
IdDB idh;
SynDB sqh;
SQLiteDatabase sqdb, iddb;
Button btnOk;
EditText etWord;
String eWord;
ListView lvMain;
public ArrayAdapter<String> adapter;
public String string_word;
public String[] syns;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etWord = (EditText) findViewById(R.id.etWord);
btnOk = (Button) this.findViewById(R.id.btnOk);
lvMain = (ListView) findViewById(R.id.lvMain);
btnOk.setOnClickListener(btnOkListener);
//initialize our class-cover IdDB
idh = new IdDB(this);
// initialize our class-cover SynDB
sqh = new SynDB(this);
// we need db to read and write
sqdb = sqh.getWritableDatabase();
iddb = idh.getWritableDatabase();
}
public void displayListView(){
// создаем адаптер
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, syns);
}
public OnClickListener btnOkListener = new OnClickListener(){
@Override
public void onClick(View v) {
eWord = etWord.getText().toString();
switch (v.getId()){
case R.id.btnOk:
String query = //long SQL query (return "word")
Log.d(LOG_TAG, query);
Log.d(LOG_TAG, "--- Rows in mytable: ---");
// query to get Cursor
Cursor cursor = sqdb.rawQuery(query, null);
int wordColIndex = cursor.getColumnIndex(SynDB.Word);
while (cursor.moveToNext()) {
string_word = cursor.getString(wordColIndex);
Log.d(LOG_TAG, "word = "+ string_word);
syns = new String[] {string_word};
displayListView();
// присваиваем адаптер списку
lvMain.setAdapter(adapter);
}
cursor.close();
break;
default:
break;
} // close switch
} // close onClick
};
protected void onStop() {
super.onStop();
sqdb.close();
sqh.close();
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View view) {
}
}
public类MainActivity扩展活动实现OnClickListener{
最终字符串日志\u TAG=“myLogs”;
IdDB-idh;
SynDB-sqh;
sqlitedatabasesqdb,iddb;
按钮btnOk;
编辑文字;
弦埃沃德;
ListView lvMain;
公共阵列适配器;
公共字符串\u字;
公共字符串[]syns;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etWord=(编辑文本)findViewById(R.id.etWord);
btnOk=(按钮)this.findviewbyd(R.id.btnOk);
lvMain=(ListView)findViewById(R.id.lvMain);
setOnClickListener(btnoklListener);
//初始化我们的类覆盖IdDB
idh=新的IdDB(本);
//初始化我们的类cover SynDB
sqh=新SynDB(本);
//我们需要数据库来读写
sqdb=sqh.getWritableDatabase();
iddb=idh.getWritableDatabase();
}
public void displayListView(){
// создаем адаптер
适配器=新阵列适配器(此,
android.R.layout.simple_list_item_1,syns);
}
public OnClickListener btnOkListener=new OnClickListener(){
@凌驾
公共void onClick(视图v){
eWord=etWord.getText().toString();
开关(v.getId()){
案例R.id.btnOk:
字符串查询=//长SQL查询(返回“word”)
Log.d(日志标签,查询);
Log.d(Log_标记,“--”mytable中的行:--”;
//查询以获取游标
Cursor Cursor=sqdb.rawQuery(查询,空);
int-wordColIndex=cursor.getColumnIndex(SynDB.Word);
while(cursor.moveToNext()){
string\u word=cursor.getString(wordColIndex);
Log.d(Log_标签,“word=“+string_-word”);
syns=新字符串[]{String_word};
displayListView();
// присваиваем адаптер списку
lvMain.setAdapter(适配器);
}
cursor.close();
打破
违约:
打破
}//闭合开关
}//关闭onClick
};
受保护的void onStop(){
super.onStop();
sqdb.close();
sqh.close();
}
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
公共void onClick(视图){
}
}
它的作用:
string\u word
调用displayListView
创建一个数组,并将另一个适配器设置为displayListView
方法调用,并在onCreate
中添加一个。(和每个lvMain.setAdapter(适配器);
)
您的displayListView
应该是唯一一个将适配器设置为
到最上面去哪里
public String[] syns;
并将其类型更改为(有一个带列表的构造函数,所以不用担心)
应该像
int wordColIndex = cursor.getColumnIndex(SynDB.Word);
while (cursor.moveToNext()) {
string_word = cursor.getString(wordColIndex);
Log.d(LOG_TAG, "word = "+ string_word);
syns = new String[] {string_word};
}
现在,您应该将光标返回的每个单词都添加到中,因此您应该使用.add
方法
int wordColIndex = cursor.getColumnIndex(SynDB.Word);
while (cursor.moveToNext()) {
string_word = cursor.getString(wordColIndex);
Log.d(LOG_TAG, "word = "+ string_word);
syns.add(string_word);
}
准备好后,调用adapter.notifyDataSetChanged()
,通知适配器您已完成更改数据,并可以在
public List<String> syns;
int wordColIndex = cursor.getColumnIndex(SynDB.Word);
while (cursor.moveToNext()) {
string_word = cursor.getString(wordColIndex);
Log.d(LOG_TAG, "word = "+ string_word);
syns = new String[] {string_word};
displayListView();
// присваиваем адаптер списку
lvMain.setAdapter(adapter);
}
int wordColIndex = cursor.getColumnIndex(SynDB.Word);
while (cursor.moveToNext()) {
string_word = cursor.getString(wordColIndex);
Log.d(LOG_TAG, "word = "+ string_word);
syns = new String[] {string_word};
}
int wordColIndex = cursor.getColumnIndex(SynDB.Word);
while (cursor.moveToNext()) {
string_word = cursor.getString(wordColIndex);
Log.d(LOG_TAG, "word = "+ string_word);
syns.add(string_word);
}