Я знаю, что здесь было задано много раз, но абсолютно ничего не работает.Перезагрузка ListView, .notifyDataSetChanged не работает
У меня есть ListView, где он загружается, а затем нажатие кнопки, список меняется в файле, а затем мне нужно перезагрузить новые данные. В настоящее время он просто добавляет содержимое файла в конец старого списка, а не создает новый. Я понятия не имею, что я делаю неправильно, я пробовал boxAdapter.notifyDataSetChanged();
, где boxAdapter привязывается к моему списку.
У меня есть метод, который я звоню, чтобы загрузить ListView
public void setUpPage(){
fillData();
boxAdapter = new ListAdapter(this, events);
ListView lvMain = (ListView) findViewById(R.id.lvMain);
lvMain.setAdapter(boxAdapter);
//boxAdapter.notifyDataSetChanged();
}
Тогда в моем public void removeClick(View v)
я звоню setUpPage();
Я попытался положить boxAdapter,notifyDataSetChanged();
в конце моего метода кнопки, но это не помогает либо , Любая помощь будет оценена по достоинству, может быть, я должен помещать notifydatasgetanged в другое место?
редактировать: полный listadapter:
public class ListAdapter extends BaseAdapter {
Context ctx;
LayoutInflater lInflater;
ArrayList<Event> objects;
ListAdapter(Context context, ArrayList<Event> events) {
ctx = context;
objects = events;
lInflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void updateList(){
notifyDataSetChanged();
}
@Override
public int getCount() {
return objects.size();
}
@Override
public Object getItem(int position) {
return objects.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.list_item, parent, false);
}
Event p = getProduct(position);
((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + "");
((TextView) view.findViewById(R.id.description)).setText(p.description);
((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);
CheckBox selectCB = (CheckBox) view.findViewById(R.id.selectBox);
selectCB.setButtonDrawable(R.drawable.unchecked);
selectCB.setOnCheckedChangeListener(myCheckChangList);
selectCB.setTag(position);
selectCB.setChecked(p.box);
return view;
}
Event getProduct(int position) {
return ((Event) getItem(position));
}
ArrayList<Event> getBox() {
ArrayList<Event> box = new ArrayList<Event>();
for (Event p : objects) {
if (p.box)
box.add(p);
}
return box;
}
OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
getProduct((Integer) buttonView.getTag()).box = isChecked;
if(buttonView.isChecked()) {
buttonView.setButtonDrawable(R.drawable.checked);
}
else{
buttonView.setButtonDrawable(R.drawable.unchecked);
}
}
};
}
заполнения данных:
void fillData() {
String ret = "";
try {
InputStream inputStream = openFileInput("UserEvents.txt");
if (inputStream != null) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ((receiveString = bufferedReader.readLine()) != null) {
stringBuilder.append(receiveString);
String[] separated = receiveString.split("~");
String event = separated[0]; // this will contain "name"
String eventloc = separated[1]; // this will contain the rest
try {
JSONArray mainNode = new JSONArray(loadJSONFromAsset()); // call the connection to json
if (mainNode != null) //puts the values into an array
{
for (int i = 0; i < mainNode.length(); i++) {
JSONObject eachObject = mainNode.getJSONObject(i);
String location = eachObject.getString("eventLocation");
String eventtime = eachObject.getString("eventTime");
String loctime = location + " " + eventtime;
if(loctime.equals(eventloc))
{
String eventdesc = eachObject.getString("eventDescription");
int img = R.drawable.ic_launcher; //from here use event name as to which image to show
events.add(new Event(event, eventloc, eventdesc, img, false));
}
}
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
inputStream.close();
ret = stringBuilder.toString();
}
} catch (FileNotFoundException e) {
Log.e("h", "File not found: " + e.toString());
} catch (IOException e) {
Log.e("h", "Can not read file: " + e.toString());
}
}
Вы используете 'Custom Adapter'? – hrskrs
показать свой дополнительный код. –
@hrskrs yep с использованием пользовательского адаптера – Navvy