代码之家  ›  专栏  ›  技术社区  ›  puk789

Android适配器未更新

  •  0
  • puk789  · 技术社区  · 7 年前

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

    这是我的活动,旨在显示这些匹配项:

    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类当前仅接受matchID参数,该参数为字符串。将使用默认图像和此匹配ID字符串创建对象。 目前,我还没有准备好数据库中的真正匹配对象,所以我想在稍后继续之前检查回收器视图和适配器是否按预期工作。

    然而,当我去Matches活动时,它是空的,没有显示任何内容。正如您从MatchesActivity onCreate方法中所看到的,我创建了一个带有matchID=“abcdefgh”的测试Match对象,然后将其添加到matchesList中。因此,我希望将“abcdefgh”文本传递给适配器,并显示在MatchesActivity中。

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

    我对Android和Java开发相对较新,尤其是回收器视图和适配器,但从我收集的信息来看

    mMatchItemAdapter.notifyDataSetChanged();
    

    因为在那之前一切似乎都很好,所以不能正常工作。任何帮助都将不胜感激!

    1 回复  |  直到 7 年前
        1
  •  1
  •   ADM    7 年前

    您正在返回0。您应该做的是返回 mMatchesList 列表

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