自定义列表视图上的Toast消息单击Android

时间:2010-11-12 10:04:45

标签: android listview toast

我有一个自定义列表视图,其中每行有一个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();
                       }
                 }
           }
       }
    }
}

请帮助我......谢谢......

3 个答案:

答案 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怎么办? 有什么假设你跳过那张支票吗?