我知道這是討論這個問題很多,但我的問題還沒有解決。按照標題,ListView中不會與代碼Android:刷新ListView不工作
notifyDataSetChanged();
這是從main.activity
verticalButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent;
intent = new Intent(getApplicationContext(),verticalActivity.class);
intent.putExtra("table","slide_vertical");
intent.putExtra("pathConf","vertical");
startActivity(intent);
}
});
這是verticalActivity.class
public class verticalActivity extends Activity {
private String tableActivity;
private String pathConf;
listAdapter adapter;
ArrayList<listActivity> items;
@Override
public void onCreate(Bundle savedInstaceState){
super.onCreate(savedInstaceState);
setContentView(R.layout.slidevertical);
Intent intent = getIntent();
String thisNewIntent = intent.getStringExtra("table");
String thisNewPathConf = intent.getStringExtra("pathConf");
this.tableActivity = thisNewIntent;
this.pathConf = thisNewPathConf;
DatabaseAdapter db = new DatabaseAdapter(getApplicationContext());
try {
db.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}
db.openDataBase();
this.items = db.getItem(thisNewIntent);
final ListView obj = (ListView)findViewById(R.id.listvertical);
adapter = new listAdapter(this,items,tableActivity);
obj.setAdapter(adapter);
db.close();
obj.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Object o = obj.getItemAtPosition(position);
listActivity getObject = (listActivity) o;
Intent intent = new Intent(getApplicationContext(), viewItemAct.class);
intent.putExtra("type", "image");
intent.putExtra("data", getObject.getPath());
startActivity(intent);
//Toast.makeText(verticalActivity.this,"Data = "+getObject.getPath(),Toast.LENGTH_LONG).show();
}
});
}
public void refreshList(){
adapter.notifyDataSetChanged();
}
}
對於listAdapter.activity
刷新public class listAdapter extends BaseAdapter {
//private Context context;
private ArrayList<listActivity> itemList;
private LayoutInflater layoutInflater;
private String tableName;
Context myContext;
private Activity activity;
public listAdapter(Context context,ArrayList<listActivity> results,String tableName){
this.itemList = results;
layoutInflater = LayoutInflater.from(context);
this.tableName = tableName;
this.myContext = context;
}
@Override
public int getCount() {
return itemList.size();
}
@Override
public Object getItem(int position) {
return itemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
//ViewGroup p = parent;
if(convertView==null){
//layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.listitem,null,false);
holder = new ViewHolder();
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.location = (TextView)convertView.findViewById(R.id.location);
holder.date = (TextView)convertView.findViewById(R.id.date);
holder.idItem = (TextView)convertView.findViewById(R.id.iditem);
holder.listImage = (ImageView)convertView.findViewById(R.id.list_image);
holder.buttonDelete = (Button)convertView.findViewById(R.id.delButton);
holder.buttonDelete.setFocusable(false);
holder.buttonDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String idString = holder.idItem.getText().toString();
DatabaseAdapter db = new DatabaseAdapter(myContext);
try {
db.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}
db.openDataBase();
db.deleteData(idString,tableName);
((verticalActivity)activity).refreshList();
}
});
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
int id_ = itemList.get(position).getId();
//String id__ = toString(id_);
holder.idItem.setText(String.valueOf(id_));
Uri uri = Uri.parse(itemList.get(position).getPath());
holder.listImage.setImageURI(uri);
String[] splitLocation = itemList.get(position).getPath().split("/");
String nameFile = splitLocation[splitLocation.length-1];
holder.title.setText(nameFile);
holder.location.setText(itemList.get(position).getPath());
holder.date.setText(itemList.get(position).getDate());
return convertView;
}
static class ViewHolder {
TextView title;
TextView location;
TextView date;
TextView idItem;
ImageView listImage;
Button buttonDelete;
}
}
從上面的代碼中有一個按鈕來執行從數據庫中刪除數據,從數據庫中刪除數據可以已經完成但刷新ListView總是失敗。如果我的代碼有問題?有人能幫我嗎?
感謝對您的幫助球員。爲了解決這個問題,我有一個小問題。我只是從ArrayList <>項目刷新列表。
public void refreshList(){ DatabaseAdapter db = new DatabaseAdapter(getApplicationContext()); try { db.createDataBase(); } catch (IOException e) { e.printStackTrace(); } db.openDataBase(); items.clear(); items.addAll(db.getItem(tableActivity)); adapter.notifyDataSetChanged(); }
非常感謝你:)
這並不提供答案的問題。要批評或要求作者澄清,請在其帖子下方留言。 – Rico
爲什麼?你讀過上面的代碼嗎?他有一個活動變量甚至沒有初始化... –
你能詳細說明嗎?這是剛剛通過#1標記爲「低質量」 – Rico