I am using a database to store chemical formulas in.
I have an activity where I use a listview to display the formulas and when I add a formula I want it to display on the listview.
I tried using
notifyDataSetChanged()
but I'm not so sure this will redraw the listview. Also, whenever I click the menu item to add another formula, the previous formula which I have added is added to the listview.
Here is my activity:
<pre>public class FormulaActivity extends WindowListActivity {
private ArrayAdapter<String> aa;
private List<String> names = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tvHeader.setText("Formula Saves");
setContentView(R.layout.formula);
aa = getArrayAdapter();
setListAdapter(aa);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.formula_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch(item.getItemId()) {
case R.id.itmAddFormula:
List<String> temp = names;
names.clear();
addFormula();
int lastIndex = formulaDataSource.getAllFormulas().size() - 1;
temp.add(formulaDataSource.getAllFormulas().get(lastIndex).getName());
names.addAll(temp);
aa.notifyDataSetChanged();
break;
default:
break;
}
return true;
}
public ArrayAdapter<String> getArrayAdapter() {
for(int i = 0; i < formulaDataSource.getAllFormulas().size(); i++) {
names.add(formulaDataSource.getAllFormulas().get(i).getName());
}
return new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
names);
}
}
Here is
addFormula()
if necessary:
protected void addFormula() {
AlertDialog.Builder builder = new AlertDialog.Builder(WindowListActivity.this);
builder.setTitle("Add Formula");
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.add_formula_dialog, (ViewGroup) findViewById(R.id.llAddFormula));
final EditText etFormulaName = (EditText) layout.findViewById(R.id.etFormulaName);
final EditText etFormula = (EditText) layout.findViewById(R.id.etFormula);
final EditText etFormulaDesc = (EditText) layout.findViewById(R.id.etFormulaDesc);
builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
formulaDataSource.createFormula(etFormulaName.getText().toString(),
etFormula.getText().toString(),
etFormulaDesc.getText().toString());
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setView(layout);
builder.create().show();
}