私はタイトルがちょっと変わって見えるかもしれませんが、説明することを許可します!別のアクティビティでは、FirebaseとRecyclerviewを使って表示されるオブジェクトのリストがあります。私はユーザーを正しくつかむことができます(私のOnCreateのToastはこれを決定するのに役立ちます)。しかし、私が新しいオブジェクト(GroupMembers)として "picked"オブジェクトを表示しようとすると、重複が発生します。私はこれがmGroupMembers.setName & mGroupMembers.setUsernameによって引き起こされると思います。アダプタのコードを表示して、間違いがないことを確認します。なぜ、これがなぜ発生しているのか、また、選択したオブジェクトを対応する名前とユーザー名で正しく表示しない理由を誰にでも教えてもらえますか?トーストには名前とユーザー名が表示されますか?ここでRecyclerViewは同じオブジェクトを複製し、別のものを表示する必要があります
は私のカスタムアダプタです: MembersAdapter
public class MembersAdapter extends RecyclerView.Adapter<MembersAdapter.ViewHolder> {
private List<GroupMembers> mMembers;
private final int TOTAL_AMOUNT = 100; //Max amount for all seekbars.
private final List<Integer> mAllProgress = new ArrayList<>();
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView mName, mUsername, mPercent;
private SeekBar mSeekBar;
ViewHolder(View itemView) {
super(itemView);
mName = (TextView) itemView.findViewById(R.id.name_view_members);
mUsername = (TextView) itemView.findViewById(R.id.username_view_members);
mPercent = (TextView) itemView.findViewById(R.id.percent_text);
mSeekBar = (SeekBar) itemView.findViewById(R.id.percent_seekbar);
}
}
//Constructor
public MembersAdapter(List<GroupMembers> members) {
this.mMembers = members;
}
@Override
public MembersAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout_members, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
GroupMembers individual = mMembers.get(position);
holder.mName.setText(individual.getName());
holder.mUsername.setText(individual.getUsername());
}
@Override
public int getItemCount() {
return mMembers.size();
}
}
そしてここでは、OnCreateの方法で、私は他の活動からのアダプタとrecyclerviewが使用されている場所まで余分をつかむところ、私はちょうど用意しました。
は、ここに私の関連する活動です: PaymentsOptionActivityすべてのヘルプははるかに高く評価されるだろう
public class PaymentOptionsActivity extends AppCompatActivity {
//Tag
private static String TAG = "PaymentOptionsActivity";
@Bind(R.id.name_label)
TextView mNameLabel;
@Bind(R.id.cost_label)
TextView mCostLabel;
@Bind(R.id.color_label)
TextView mColorLabel;
@Bind(R.id.recurrence_label)
TextView mRecurrenceLabel;
@Bind(R.id.name_field)
EditText mNameField;
@Bind(R.id.cost_field)
EditText mCostField;
@Bind(R.id.color_button)
Button mColorButton;
@Bind(R.id.recurrence_spinner)
Spinner mRecurrenceSpinner;
@Bind(R.id.activity_payment_options)
RelativeLayout mActivityPaymentOptions;
@Bind(R.id.members_recycler)
RecyclerView mRecyclerview;
@Bind(R.id.bottom_naviation)
BottomNavigationView mBottomNavigationView;
private int mSelectedColor;
private List<GroupMembers> mMembers = new ArrayList<>(); //Group Members in a List.
private GroupMembers mGroupMembers = new GroupMembers(); //Individual Group Members
private MembersAdapter mAdapter;
private String name;
private String email;
private String username;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_payment_options);
ButterKnife.bind(this);
initiateBottomView();
//Extra from other activity.
List<UserList> groupMembers = (List<UserList>) getIntent().getSerializableExtra("users"); //Selected Members
//Convert UserList -> Members
for (UserList users : groupMembers) {
name = users.getName();
email = users.getEmail();
username = users.getUsername();
mGroupMembers.setName(name);
mGroupMembers.setUsername(username);
//Display who's picked for testing.
Toast.makeText(this, "Selected: " + name, Toast.LENGTH_SHORT).show();
//List<GroupMembers> now has however members were selected..
mMembers.add(mGroupMembers);
//RecyclerView + Adapter
mRecyclerview.setHasFixedSize(true);
mRecyclerview.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new MembersAdapter(mMembers);
mRecyclerview.setAdapter(mAdapter);
}
public void initiateBottomView() {
mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Intent i;
switch (item.getItemId()) {
case R.id.action_groups:
//Refresh
i = new Intent(PaymentOptionsActivity.this, PaymentsSearchActivity.class);
startActivity(i);
return true;
case R.id.action_dashboard:
i = new Intent(PaymentOptionsActivity.this, DashboardActivity.class);
startActivity(i);
return true;
case R.id.action_profile:
item.setEnabled(true);
i = new Intent(PaymentOptionsActivity.this, ProfileActivity.class);
startActivity(i);
return true;
}
return false;
}
});
}
、および任意の提案があるかどう私は同様にいただければ幸い私のコードで行う必要があります。これはむしろ大規模なアプリケーションであり、私は関連性を保つために非常に多くのコードを除外しています。
ありがとうございました!
OnCreateメソッドで選択されたユーザーをテストするときに、Toast.makeText(this、 "Selected:" + mGroupMembers.getName()、Toast.LENGTH_SHORT)を試してみました。 .show(); 'GroupMembersが実際に両方の名前を設定しているかどうかをテストします。非常に混乱して、私はそれが簡単な修正でなければならないことを知っています。 –