我有一个自定义列表视图,其中每行有一个textview和一个复选框。 当我单击ckeckbox时,我想将TextView中的值添加到数据库并在视图中显示Toast消息。数据库插入工作正常。但是应用程序突然停止,并且Toast消息未显示在视图中。
public class Favourites extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_list);
ListView listitems = (ListView) findViewById(R.id.ListView_01);
listitems.setAdapter(new EfficientAdapter(this));
}
private static class EfficientAdapter extends BaseAdapter
{
//imp
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
int itemId=SubListIdList.get(position);
TextView text = (TextView) convertView.findViewById(R.id.TextView_02);
CheckBox star = (CheckBox) convertView.findViewById(R.id.star);
star.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked)
{
Favourites f=new Favourites();
query="UPDATE "+SUB_TABLE_NAME+" SET FavoriteIndicator='Y' WHERE SubListID="+itemId;
db.execSQL(query);
Toast.makeText(f, "Insertion successfull!", 1).show();
}
}
}
}
}
}
请帮助我......谢谢......
答案 0 :(得分:1)
你可以像这样直接举杯,
Toast.makeText(Favourites.this, "Toast!", Toast.LENGTH_SHORT).show();
答案 1 :(得分:0)
将Toast
通知提供给您的主要活动上下文以显示它。我不太确定你为什么要在onCheckedChanged()
方法中再次实例化你的活动,但我猜你试图通过你的Toast
传递一个上下文。试试这种方式。
Context ctx = null;
onCreate(Bundle bundle) {
super.onCreate(bundle);
// more stuff
ctx = getApplication();
// even more stuff
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
query="UPDATE "+SUB_TABLE_NAME+" SET FavoriteIndicator='Y' WHERE" +
" SubListID="+itemId;
db.execSQL(query);
Toast.makeText(ctx, "Insertion successfull!", 4000).show();
}
}
请不要将Toast
显示时间设置为一毫秒,这对您没有帮助。时间参数以毫秒为单位。
答案 2 :(得分:0)
我对您的代码有疑问......如果convertview != null
怎么办?
有什么假设你跳过那张支票吗?