notifyDataSetChanged()
に問題があります。 ListViewを扱うクラスは次のとおりです。notifydataSetChanged()後ListViewが更新されません
public class SummonersActivity extends Activity {
private ListView summonersList;
private SummonerListAdapter adapter;
private DatabaseHandler databaseHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_summoners);
databaseHandler = new DatabaseHandler(getBaseContext());
summonersList = (ListView) findViewById(R.id.summonersList);
adapter = new SummonerListAdapter(this, databaseHandler);
summonersList.setAdapter(adapter);
}
public void addSummoner(View view) {
Intent myIntent = new Intent(this, Login.class);
startActivity(myIntent);
}
@Override
protected void onResume(){
super.onResume();
adapter.swapItems(databaseHandler.getAllSummoners());
adapter.notifyDataSetChanged();
}
}
これは私が
public class SummonerListAdapter extends ArrayAdapter<Summoner> {
private final Context context;
private List<Summoner> itemsArrayList;
private final DatabaseHandler databaseHandler;
public SummonerListAdapter(Context context, DatabaseHandler databaseHandler) {
super(context, R.layout.summoner_list_row, databaseHandler.getAllSummoners());
this.context = context;
this.itemsArrayList = databaseHandler.getAllSummoners();
this.databaseHandler=databaseHandler;
}
public void update(){
this.itemsArrayList.clear();
this.itemsArrayList=databaseHandler.getAllSummoners();
this.notifyDataSetChanged();
}
public void swapItems(List<Summoner> items) {
this.itemsArrayList = items;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.summoner_list_row, parent, false);
final ImageView iconView = (ImageView) rowView.findViewById(R.id.summonerIcon);
TextView summonerName = (TextView) rowView.findViewById(R.id.summonerName);
TextView region = (TextView) rowView.findViewById(R.id.region);
ImageButton checkBtn = (ImageButton) rowView.findViewById(R.id.checkBtn);
Icon icon = databaseHandler.getIcon(itemsArrayList.get(position).getProfileIconId());
if (icon==null){
RequestParams requestParams = new RequestParams();
requestParams.put("region",itemsArrayList.get(position).getRegion());
requestParams.put("id",itemsArrayList.get(position).getProfileIconId());
LeagueAssistantAPI.get("leagueAssistant/icon", requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Icon saveIcon=new Icon(itemsArrayList.get(position).getProfileIconId(),responseBody);
databaseHandler.addIcon(saveIcon);
Bitmap bitmap = BitmapFactory.decodeByteArray(responseBody, 0, responseBody.length);
Drawable iconDrawable = new BitmapDrawable(bitmap);
iconView.setImageDrawable(iconDrawable);
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
error.printStackTrace();
}
});
}
else{
Bitmap bitmap = BitmapFactory.decodeByteArray(icon.getIcon(), 0, icon.getIcon().length);
Drawable iconDrawable = new BitmapDrawable(bitmap);
iconView.setImageDrawable(iconDrawable);
}
summonerName.setText(itemsArrayList.get(position).getName());
region.setText(itemsArrayList.get(position).getRegion());
if (itemsArrayList.get(position).isSelected())
checkBtn.setBackgroundResource(R.drawable.checked);
else checkBtn.setBackgroundResource(R.drawable.check);
return rowView;
}
}
私はデータベースLogin
に新しい行を追加して別のアクティビティを持って作られたカスタムアダプタです。私はMainActivity
からSummonersActivity
からLoginActivity
に行きます。 LoginActivity
データベースに挿入してSummonersActivity
に戻ります。私はonResume
SummonersActivity
にnotifiyDataSetChanged()
を入れました。 LoginActivity
を終了した後、リストは自動的に更新されませんが、もしMainActivity
に戻ると、SummonersActivity
に戻ると、リストが更新されます。私は別の場所にnotifiyDataSetChanged()
を入れようとしましたが、うまくいかなかった。誰かが理由を指摘してもいいですか?LoginActivity
を終了した後にListView
は更新されません。
swap()の代わりにupdate()を呼び出すとどうなりますか?リストビューは更新されますか? –
番号。そのもう一つの試み。 – user2907139
明らかにこれが動作します 'protected void onResume(){ super.onResume(); adapter = new SummonerListAdapter(this、databaseHandler.getAllSummoners()); summonersList.setAdapter(adapter); } ' 汚れているようですが、仕事をしています。なぜ私の以前のソリューションが失敗したのかを知りたい。 – user2907139