Ich kann meinen RecyclerAdapter nicht dazu bringen, auf das Hinzufügen von Daten richtig zu reagieren. Hier ist meine Aktivität, die die RecyclerView verwendetnotifyDataSetChanged funktioniert nicht mit Custom RecyclerAdapter
public class MainActivity extends AppCompatActivity {
FloatingActionButton fab;
FloatingActionMenu fam;
//startActivity(intent);
private RecyclerView mRecyclerView;
ArrayList<TeamInfo> teamsInfo;
SelectedTeamsRecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*if(savedInstanceState == null) {
if(teamsInfo == null) {
Log.d("TEAM SELECTION", "teams Info == null");
teamsInfo = new ArrayList<>();
}
}
else {
if(teamsInfo == null) {
teamsInfo = savedInstanceState.getParcelableArrayList("selectedTeams");
}
}*/
teamsInfo = new ArrayList<>();
setContentView(R.layout.activity_main);
fab = (FloatingActionButton) findViewById(R.id.menu_item);
fam = (FloatingActionMenu) findViewById(R.id.menu);
fam.setClosedOnTouchOutside(true);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(v.getContext(), "Clicked", Toast.LENGTH_SHORT).show();
addClicked();
}
});
mRecyclerView = (RecyclerView) findViewById(R.id.selected_teams_recyclerview);
adapter = new SelectedTeamsRecyclerAdapter(this, teamsInfo);
adapter.setHasStableIds(true);
mRecyclerView.setAdapter(adapter);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
//teamsInfo = TeamInfo.restoreTeamInfo(this);
//adapter.setHasStableIds(true);
//mRecyclerView.setItemAnimator(null);
//DragSortRecycler dragSortRecycler = new DragSortRecycler();
mRecyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).build());
//mRecyclerView.addOnItemTouchListener(dragSortRecycler);
//mRecyclerView.addOnScrollListener(dragSortRecycler.getScrollListener());
//dragSortRecycler.setViewHandleId(R.id.selected_teams_draghandle); //View you wish to use as the handle
/*dragSortRecycler.setOnItemMovedListener(new DragSortRecycler.OnItemMovedListener() {
@Override
public void onItemMoved(int from, int to) {
itemMoved(from, to);
}
});
*/
}
public void itemMoved(int from, int to) {
TeamInfo item = teamsInfo.remove(from);
teamsInfo.add(to, item);
adapter.notifyItemInserted(teamsInfo.size() - 1);
}
public void addClicked() {
fam.close(true);
getNewTeamValues();
//Intent intent = new Intent(this, NewTeamActivity.class);
}
public void addNewTeam(String teamName, int primaryColor, int secondaryColor) {
teamsInfo.add(new TeamInfo(teamName, primaryColor, secondaryColor));
//adapter.mTeamsInfo.add(new TeamInfo(teamName, primaryColor, secondaryColor));
//adapter.addItem(new TeamInfo(teamName, primaryColor, secondaryColor));
adapter.notifyDataSetChanged();
}
public void getNewTeamValues() {
TextView nameTV;s
MaterialDialog dialog = new MaterialDialog.Builder(this)
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
// TODO
LineColorPicker primaryColorPicker = (LineColorPicker) dialog.getCustomView().findViewById(R.id.primaryColor);
LineColorPicker secondaryColorPicker = (LineColorPicker) dialog.getCustomView().findViewById(R.id.secondaryColor);
EditText newTeamNameEditText = (EditText) dialog.getCustomView().findViewById(R.id.teamNameEditText);
View v = dialog.getContentView();
String teamName = newTeamNameEditText.getText().toString();
int primaryColor = primaryColorPicker.getColor();
int secondaryColor = secondaryColorPicker.getColor();
addNewTeam(teamName, primaryColor, secondaryColor);
}
})
.title("Enter Team Info")
.customView(R.layout.dialog_new_team, true)
.positiveText("Add")
.negativeText("Cancel").build();
dialog.show();
}
}
Und hier ist meine Gewohnheit Adapter
public class SelectedTeamsRecyclerAdapter extends RecyclerView.Adapter<SelectedTeamsRecyclerAdapter.ViewHolder>{
public ArrayList<TeamInfo> mTeamsInfo;
Context mContext;
public SelectedTeamsRecyclerAdapter(Context context, ArrayList<TeamInfo> teamsInfo) {
mTeamsInfo = teamsInfo;
mContext = context;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView teamNameTV;
public View primaryColorV;
public View secondaryColorV;
public ViewHolder(View itemView) {
super(itemView);
teamNameTV = (TextView) itemView.findViewById(R.id.selected_teams_teamname);
primaryColorV = (View) itemView.findViewById(R.id.selected_teams_primarycolor);
secondaryColorV = (View) itemView.findViewById(R.id.selected_teams_secondarycolor);
}
}
@Override
public int getItemCount() {
return mTeamsInfo.size();
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
TeamInfo teamInfo = mTeamsInfo.get(position);
holder.teamNameTV.setText(teamInfo.getTeamName());
holder.primaryColorV.setBackgroundColor(teamInfo.getPrimaryColor());
holder.secondaryColorV.setBackgroundColor(teamInfo.getSecondaryColor());
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.selected_teams_list_item, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public long getItemId(int position) {
return position;
}
public void addItem(TeamInfo teamInfo) {
mTeamsInfo.add(teamInfo);
}
/*public ArrayList<TeamInfo> getTeamsInfo() {
return this.teamsInfo;
}*/
}
ich fast genau die gleichen Code in der Vergangenheit geschrieben habe und alles sehr gut geklappt hat.
Oh mein Gott. Ich habe letzte Nacht Stunden damit verbracht, das herauszufinden. Das bekomme ich um 3 Uhr morgens für die Programmierung. – Sheel7