2018.5.30 0.19 CZ c.~
最近在完成一个关于Android掌上课堂App的课程设计。
在阅读修改别人的代码时发现了几个常见的问题。
1.关于listView适配器显示SQLite内部数据时,遇到的查询数据放入HashMap后,查询下一条数据总会会覆盖前一条查询出的数据的问题。
public ArrayList<HashMap<String, String>> selectEleTeaInfo()
{
HashMap<String, String> teaInfo=new HashMap<String, String>();
String id="";
String name="";
String position="";
String pass="";
SQLiteDatabase db=helper.getWritableDatabase();
Cursor cursor=db.rawQuery("select * from teachInfo where teaPosition like '%电子%'", null);
if(cursor==null)
{
Toast.makeText(context,"无学生数据", Toast.LENGTH_LONG).show();
}
else
{
while(cursor.moveToNext())
{
//HashMap<String, String> teaInfo=new HashMap<String, String>();修改后的
id=cursor.getString(cursor.getColumnIndex("teaID")).trim();name=cursor.getString(cursor.getColumnIndex("teaName")).trim();
position=cursor.getString(cursor.getColumnIndex("teaPosition"));
pass=cursor.getString(cursor.getColumnIndex("teapassword"));
teaInfo.put("teaID", id);
teaInfo.put("teaName",name);
teaInfo.put("teaPosition", position);
teaInfo.put("teapassword", pass);
tea3.add(teaInfo);
}
}
cursor.close();
db.close();
return tea3;
}
这样写会导致以上问题。
这个问题的关键在与HashMap的new。由于刚开始我只new了一个新的HashMap,导致在每次遍历数据时,都是把下一条新数据放入表内,且覆盖了前一条数据。解决它只需要在在每次while内new HashMap即可。
2.如何把MenusBar和TabHost的tab关联在一起。遇到的需求是:在不同的tab界面上时,点击Bar上的按钮只能弹出相应的view。
这个问题实际上是为了解决如何确认当前tab界面,以便发送一个flag值去与Bar上的按钮进行联系。
解决方法主要是:TabHost 内的setOnTabChangedListener()方法//根据标签的切换情况来设置myMenuSettingTag
tabhost.setOnTabChagedListener(new OnTabChangeListener{
public void onTabChanged(String tabid)
{
//tab1是上面tabhost.newTabSpec("tab1")
if(tabid.equals("tab1"))
{flag=1;}
if(tabid.equals("tab2"))
{flag=2;}
}
});