2016-05-21 54 views
1

我在RecyclerView CardView看上去类似于这种格式CardView突然RecyclerView隔开

  • original

现在它隔开

  • problem spacing

它发生了一个小时k前。我以为我放错了一行代码。不知道我做了什么。我认为这是我最终会发现的一个小错误....

有一次,适配器很好,然后下一刻,它全部分开。我看过当地的历史等,我找不到我所做的。

如果它不是什么小事,怀疑我的项目中的RecyclerView库会以某种方式搞砸,因为我在另一个区域使用的另一个适配器也有间距问题。但是,我从未去过任何附近的地方。

但是,我从另一个项目在线复制粘贴另一个RecyclerView适配器,它运行良好,所以我相信我找到了一个我找不到的地方。 UPDATE 3/22在所有这一切出现之前,我设法找到了一个备份。我复制并将“坏”代码粘贴到未知的备份中,并且适配器看起来应该是这样。然而,它并不像原来那样。

CustomAdapter.java

// Dataset = list of players and their attributes 
private final ArrayList<PlayerData> dataSet; 
private final List<PlayerData> filteredList; 
private ArrayList<PlayerData> originalItems; 
public static class MyViewHolder extends RecyclerView.ViewHolder { 

    TextView textViewName; 
    TextView textViewPos; 
    ImageView imageViewFace; 
    ImageView imageTeamLogo; 
    TextView textViewTeam; 

    public MyViewHolder(View itemView) { 
     super(itemView); 
     this.textViewName = (TextView) itemView.findViewById(R.id.textViewName); 
     this.textViewPos = (TextView) itemView.findViewById(R.id.textViewPos); 
     this.imageViewFace = (ImageView) itemView.findViewById(R.id.imageViewFace); 
     this.imageTeamLogo = (ImageView) itemView.findViewById(R.id.ImgTeamLogo); 
     this.textViewTeam = (TextView) itemView.findViewById(R.id.textViewTeam); 

    } 
} 
//dataset = data from Main Activity 
public CustomAdapter(ArrayList<PlayerData> data) { 
    this.dataSet = data; 
    this.filteredList = data; 

} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, 
             int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.cards_layout, parent, false); 

    MyViewHolder myViewHolder = new MyViewHolder(view); 

    return myViewHolder; 
} 

@Override 
public void onBindViewHolder(final MyViewHolder holder, final int Position) { 
    // called everytime user scrolls up or down 
    TextView textViewName = holder.textViewName; 
    TextView textViewPos = holder.textViewPos; 
    ImageView imageViewFace = holder.imageViewFace; 
    ImageView imageViewLogo = holder.imageTeamLogo; 
    TextView textViewTeam = holder.textViewTeam; 


    textViewName.setText(dataSet.get(Position).getName()); 

    textViewPos.setText(dataSet.get(Position).getPos()); 

    textViewTeam.setText(dataSet.get(Position).getTeam()); 




    Context context = imageViewFace.getContext(); 
    Context context2 = imageViewLogo.getContext(); 

    Picasso.with(context) 
      .load(dataSet.get(Position).getFace()) 
      .placeholder(R.drawable.ic_launcher) 
      .error(R.drawable.ic_3d_rotation) 
      .into(holder.imageViewFace); 

    Glide.with(context2).load(dataSet.get(Position).getTeamLogo()).into(holder.imageTeamLogo); 
} 

@Override 
public int getItemCount() { 
    return dataSet.size(); 
} 
public void animateTo(ArrayList<PlayerData> players) { 
    //checks what query found and adds/removes results 
    // problem is, it is not adding back results 
    applyAndAnimateRemovals(players); 
    applyAndAnimateAdditions(players); 
    applyAndAnimateMovedItems(players); 

} 

private void applyAndAnimateRemovals(ArrayList<PlayerData> newPlayers) { 
    for (int i = dataSet.size() - 1; i >= 0; i--) { 
     final PlayerData player = dataSet.get(i); 
     if (!newPlayers.contains(player)) { 
      removeItem(i); 
     } 
    } 
} 

private void applyAndAnimateAdditions(ArrayList<PlayerData> newPlayers) { 
    for (int i = 0, count = newPlayers.size(); i < count; i++) { 
     final PlayerData player = newPlayers.get(i); 
     if (!dataSet.contains(player)) { 
      addItem(i, player); 
     } 
    } 
} 


private void applyAndAnimateMovedItems(ArrayList<PlayerData> newPlayers) { 
    for (int toPosition = newPlayers.size() - 1; toPosition >= 0; toPosition--) { 
     final PlayerData player = newPlayers.get(toPosition); 
     final int fromPosition = dataSet.indexOf(player); 
     if (fromPosition >= 0 && fromPosition != toPosition) { 
      moveItem(fromPosition, toPosition); 
     } 
    } 
} 

public PlayerData removeItem(int position) { 
     final PlayerData player = dataSet.remove(position); 
     notifyItemRemoved(position); 

     return player; 
    } 
    public void addItem(int position, PlayerData player) { 
     dataSet.add(position, player); 
     // this code is not working for whatever reason) 
     notifyItemInserted(position); 


    } 

    public void moveItem(int fromPosition, int toPosition) { 
     final PlayerData player = dataSet.remove(fromPosition); 
     dataSet.add(toPosition, player); 
     notifyItemMoved(fromPosition, toPosition); 
    } 
} 

MainFragment.Java

public class MainFragment extends Fragment implements SearchView.OnQueryTextListener { 
    public static MainFragment newInstance() { 
     return new MainFragment(); 
    } 

    private static RecyclerView recyclerView; 
    private static CustomAdapter adapter; 
    private static ArrayList<PlayerData> data; 





    private RecyclerView.LayoutManager layoutManager; 
    static View.OnClickListener myOnClickListener; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View view = inflater.inflate(R.layout.fragment_main, container, false); 


     recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 

     return view; 

    } 


    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     setHasOptionsMenu(true); 

     recyclerView.setHasFixedSize(true); 

     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 

     data = new ArrayList<PlayerData>(); 


     addPlayers(); 
     adapter = new CustomAdapter(data); 

     recyclerView.setAdapter(adapter); 


    } 


    public interface Constants { 
     String LOG = "com.vogella.testapp"; 
    } 
    private void addPlayers() { 

     PlayerData player = new PlayerData("Chris Smith", "#", R.drawable.auser, R.drawable.aquestion, "First", 0); 
     data.add(0,player); 
     player = new PlayerData("Bobby Richars","#", R.drawable.auser, R.drawable.aquestion, "Second", 9); 
     data.add(player); 
     player = new PlayerData("Steven Williams", "#", R.drawable.auser, R.drawable.aquestion, "Third", 1); 
     data.add(player); 


     player = new PlayerData("Tony Lloyd", "#", R.drawable.auser, R.drawable.aquestion, "Fourth", 2); 
     data.add(player); 

     player = new PlayerData("Henry Gates", "#", R.drawable.auser,R.drawable.aquestion, "Fifth", 3); 
     data.add(player); 

     player = new PlayerData("Robert Marks", "#", R.drawable.auser, R.drawable.aquestion, "Sixth", 4); 
     data.add(player); 
    } 
    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.menu_main, menu); 

     final MenuItem item = menu.findItem(R.id.action_search); 
     final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 
     searchView.setOnQueryTextListener(this); 

    } 
    @Override 
    public boolean onQueryTextChange(String query) { 
     final ArrayList<PlayerData> filteredModelList = filter(data, query); 
     adapter.animateTo(filteredModelList); 
     recyclerView.scrollToPosition(0); 
     return false; 
    } 

    @Override 
    public boolean onQueryTextSubmit(String query) { 
     return false; 
    } 

    private ArrayList<PlayerData> filter(ArrayList<PlayerData> players, String query) { 
     query = query.toLowerCase(); 

     final ArrayList<PlayerData> filteredModelList = new ArrayList<>(); 
     for (PlayerData player : players) { 
      final String text = player.getName().toLowerCase() + player.getPos().toLowerCase()+ player.getTeam().toLowerCase(); 
      if (text.contains(query)) { 
       filteredModelList.add(player); 
      } 
     } 
     return filteredModelList; 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     super.onOptionsItemSelected(item); 
     return true; 
    } 


} 

回答

0

我找到了解决办法。我改变了我所有的Android:layout_width和android:layout_height其中cardviews只成了“WRAP_CONTENT”而不是“match_parent)

感谢 RecyclerView v23.2.0 and blank space after swiping up

虽然,它并不能解释为什么我的代码工作正常时,出口到其他项目。