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 に答える