Android 适配器未更新

Android Adapter not being updated

我想在适配器的帮助下在回收器视图中显示匹配对象列表(匹配 = 两个用户互相喜欢)。

这是我的 activity,用于显示那些匹配项:

public class MatchesActivity extends AppCompatActivity {

// variables:
private RecyclerView mMatchesRecyclerView;
private RecyclerView.Adapter mMatchItemAdapter;
private RecyclerView.LayoutManager mMatchesLayoutManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_matches);

    mMatchesRecyclerView = findViewById(R.id.matches_recyclerView);
    mMatchesRecyclerView.setNestedScrollingEnabled(false);
    mMatchesRecyclerView.setHasFixedSize(true);

    // set layout manager & pass it to the recycler view:
    mMatchesLayoutManager = new LinearLayoutManager(MatchesActivity.this);
    mMatchesRecyclerView.setLayoutManager(mMatchesLayoutManager);

    // set match adapter & pass it to the recycler view:
    mMatchItemAdapter = new MatchItemAdapter(getMatchesList(), MatchesActivity.this);
    mMatchesRecyclerView.setAdapter(mMatchItemAdapter);

    // add test items to the recycler view:
    Match testMatch = new Match("abcdefgh");
    matchesList.add(testMatch);
    mMatchItemAdapter.notifyDataSetChanged();
    Log.d("MatchesActivity", "TEST LIST: " + matchesList.toString());
}

private ArrayList<Match> matchesList = new ArrayList<Match>();
private List<Match> getMatchesList() {
    Log.d("MatchesActivity", "getMatchesList function: " + matchesList.toString());
    return matchesList;
}
}

这是我的适配器,它应该膨胀相关布局并用相关对象数据填充它:

public class MatchItemAdapter extends RecyclerView.Adapter<MatchViewholder> {

private List<Match> mMatchesList;
private Context mViewContext;

public MatchItemAdapter(List<Match> matchesList, Context context) {
    this.mMatchesList = matchesList;
    this.mViewContext = context;
    Log.d("MatchItemAdapter", "Constructor: " + mMatchesList.toString());
}

// inflate the layout:
@Override
public MatchViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_matches, null, false);
    RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    layoutView.setLayoutParams(lp);
    MatchViewholder matchViewholder = new MatchViewholder(layoutView);
    Log.d("MatchItemAdapter", "onCreateViewHolder: " + mMatchesList.toString());
    return matchViewholder;
}

// populate each row within the layout:
@Override
public void onBindViewHolder(MatchViewholder holder, int position) {
    Log.d("MatchItemAdapter", "onBindViewHolder: " + mMatchesList.toString());
    holder.mMatchID.setText(mMatchesList.get(position).getMatchID());
}

@Override
public int getItemCount() {
    return 0;
}

}

Match class目前只接受字符串形式的matchID参数。使用默认图像和此 matchID 字符串创建一个对象。 目前,我还没有准备好来自数据库的真正匹配对象,所以我想在稍后继续之前检查回收器视图和适配器是否按预期工作。

然而,当我转到 Matches Activity 时,它是空的,什么也没有显示。从 MatchesActivity onCreate 方法可以看出,我创建了一个 matchID = "abcdefgh" 的测试 Match 对象,然后将其添加到 matchesList。所以我希望 "abcdefgh" 文本被传递到适配器并显示在 MatchesActivity.

我的日志语句表明 Match 对象已成功创建并添加到列表中,但是,getMatchesList() 函数 returns 一个空列表,然后在 Adapter 构造函数中使用,(我认为这是)导致 Activity 不显示任何内容。

我对 Android 和 Java 开发比较陌生,尤其是回收器视图和适配器,但从我收集到的信息来看,似乎

mMatchItemAdapter.notifyDataSetChanged();

无法正常工作,因为在那之前一切似乎都很好。如有任何帮助,我们将不胜感激!

你 returning 0。你应该做的是 return mMatchesList 列表的长度。

@Override
public int getItemCount() {
    return mMatchesList.size();
}