0

我想在我选择“删除”ContextItem 之后刷新/更新,它会删除但不“刷新”在代码 ListActivity 上看到的列表视图:

public class ProjetoProTelefoneActivity extends ListActivity {
public final static String ID_EXTRA = "br.com.DaniloDeLuca.ProjetoProTelefone._ID";
Cursor modelo = null;
RestaurantAdapter adapter = null;
RestauranteHelper helper=null;
SharedPreferences prefs=null;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    helper = new RestauranteHelper(this);
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    initList();
    prefs.registerOnSharedPreferenceChangeListener(prefListener);

    registerForContextMenu(getListView());
}

public void onDestroy(){
    super.onDestroy();

    helper.close();
}

//*********************************************************************************************************************************
// Long Press menu
//*********************************************************************************************************************************
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterView.AdapterContextMenuInfo info;
    try {
        info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    } catch (ClassCastException e) {        
        return;
    }
    Cursor cursor = (Cursor) getListAdapter().getItem(info.position);
    if (cursor == null) {
        return;
    }
    new MenuInflater(this).inflate(R.menu.option_item,menu);
    super.onCreateContextMenu(menu,v,menuInfo);
}

public boolean onContextItemSelected(MenuItem item)
{
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    int index = info.position;
    View view = info.targetView;
    long id = info.id;

    if(item.getItemId()==R.id.edit){
        Intent i=new Intent(ProjetoProTelefoneActivity.this, DetailForm.class);
        i.putExtra(ID_EXTRA, String.valueOf(id));
        startActivity(i);
        return(true);
    }
    else if(item.getItemId()==R.id.remove){

        Intent i=new Intent(ProjetoProTelefoneActivity.this, DeleteItemList.class);
        i.putExtra(ID_EXTRA, String.valueOf(id));
        startActivity(i);
        return(true);
    }
    return super.onContextItemSelected(item);
}
//*********************************************************************************************************************************
// Fim Long Press menu
//*********************************************************************************************************************************
public void onListItemClick(ListView list, View view,
        int position,long id){
    Intent i=new Intent(ProjetoProTelefoneActivity.this, DetailForm.class);
    i.putExtra(ID_EXTRA, String.valueOf(id));
    startActivity(i);
}
//hook into menu button for activity 
public boolean onCreateOptionsMenu(Menu menu){
    new MenuInflater(this).inflate(R.menu.option,menu);
    return(super.onCreateOptionsMenu(menu));
}
/// when menu button option selected 
public boolean onOptionsItemSelected(MenuItem item){
    if(item.getItemId()==R.id.add){
        startActivity(new Intent(ProjetoProTelefoneActivity.this, DetailForm.class));
        return(true);
    }
    else if(item.getItemId()==R.id.prefs){
        startActivity(new Intent(this, EditPreferences.class));
        return(true);
    }
    return(super.onOptionsItemSelected(item));
}

private SharedPreferences.OnSharedPreferenceChangeListener prefListener=
        new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                    String key) {
                if(key.equals("sort_order")){
                    initList();
                }

            }
};
private void initList(){
    if(modelo!=null){
        stopManagingCursor(modelo);
        modelo.close();
    }

    modelo =helper.getAll(prefs.getString("sort_order","nome DESC"));
    startManagingCursor(modelo);

    adapter = new RestaurantAdapter(modelo);       
    setListAdapter(adapter);         

}

class RestaurantAdapter extends CursorAdapter {
    RestaurantAdapter(Cursor c) {
      super(ProjetoProTelefoneActivity.this, c);
    }

    public void bindView(View row, Context ctxt,
                         Cursor c) {
      RestaurantHolder holder=(RestaurantHolder)row.getTag();

      holder.populateFrom(c, helper);
    }


    public View newView(Context ctxt, Cursor c,
                         ViewGroup parent) {
      LayoutInflater inflater=getLayoutInflater();
      View row=inflater.inflate(R.layout.row, parent, false);
      RestaurantHolder holder=new RestaurantHolder(row);

      row.setTag(holder);

      return(row);
    }
  }

  static class RestaurantHolder {
    private TextView name=null;
    private TextView address=null;
    private ImageView icon=null;

    RestaurantHolder(View row) {
      name=(TextView)row.findViewById(R.id.title);
      address=(TextView)row.findViewById(R.id.address);
      icon=(ImageView)row.findViewById(R.id.icon);
    }

    void populateFrom(Cursor r,RestauranteHelper helper) {
      name.setText(helper.getNome(r));
      address.setText(helper.getEnd(r));


      if (helper.getTipo(r).equals("casa")) {
        icon.setImageResource(R.drawable.casa_icon);
      }
      else if (helper.getTipo(r).equals("apartamento")) {
        icon.setImageResource(R.drawable.apartamento_icon);
      }
      else {
        icon.setImageResource(R.drawable.comercio_ico);
      }
    }
  }

}

现在我的 DeleteItemList:

public class DeleteItemList extends Activity{
RestauranteHelper helper = null;
String restauranteId= null;
public void onCreate(Bundle savedInstaceState){
    super.onCreate(savedInstaceState);
    helper= new RestauranteHelper(this);


    restauranteId=getIntent().getStringExtra(ProjetoProTelefoneActivity.ID_EXTRA);

    helper.delete(restauranteId);
    finish();
}

public void onDestroy(){
    super.onDestroy();
    helper.close();

}

}

RestauranteHelper.delete:

    public void delete(String id){
    String[] args = {id};

    getWritableDatabase().delete("restaurantes", "_ID =?", args);

}

idk,如果它清楚我想要做什么......我想刷新列表,在选择“删除”选项之后。

=D

4

1 回答 1

0

更改列表中的项目后,调用列表适配器上的 notifyDatasetChanged。这样就可以了。

下面是 ListView 的工作方式。

初始化列表后,设置列表适配器中的项目。现在调用 listview.setAdapter 方法来设置适配器。

现在,当您对项目进行任何更改时,请在您传递给适配器的列表中更改它们。

然后调用适配器上的 notofyDatasetChanged。

那应该行得通。如果这不起作用,那么还有其他问题,请尝试调试代码的每个步骤。

** 在您的情况下,您正在调用数据库助手上的删除,但是当您更改数据库上的内容时,您的光标或适配器不会更新。您需要从游标中删除该项目或再次查询数据库,然后将其传递给适配器。

于 2012-06-06T16:51:48.930 回答