2016-05-21 26 views
1

Mein CardView in einem RecyclerView gestaffelt sah in dieses Format ähnlichCardView plötzlich in RecyclerView

  • original

jetzt ist es heraus gesperrt

  • problem spacing

Es ist ein kleines passiert k vor. Ich dachte, ich hätte eine Codezeile verlegt. habe keine Ahnung was ich gemacht habe. Ich dachte, es wäre ein kleiner Fehler, den ich irgendwann finden würde ....

Ein Moment, der Adapter war in Ordnung, dann im nächsten Moment, es ist alles auseinander. Ich habe mir die lokale Geschichte angeschaut usw. Ich kann nicht finden, was ich getan habe.

Wenn es nichts Kleines ist, habe den Verdacht, dass irgendwie die RecyclerView-Bibliothek in meinem Projekt irgendwie durcheinander ist, weil ein anderer Adapter, den ich in einem anderen Bereich benutzte, auch das Abstandsproblem hat. Allerdings bin ich nirgendwo in der Nähe gewesen.

Allerdings habe ich einen anderen RecyclerView-Adapter aus einem anderen Projekt online kopiert und eingefügt, und es lief gut in meinem, so glaube ich, dass ich einen Fehler gemacht habe irgendwo, den ich nicht finden kann. UPDATE 3/22 Ich habe es geschafft, ein Backup zu finden, das ich gemacht habe, bevor das alles aufkam. Ich kopierte den "schlechten" Code und fügte ihn in das unbeschädigte Backup ein und der Adapter kam so heraus, als ob er es sein sollte. Im Original erscheint es jedoch nicht so.

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; 
    } 


} 

Antwort

0

fand ich eine Lösung. Ich änderte meine Android: layout_width und android: layout_height wo die cardviews waren, in „wrap_content“ statt „match_parent)

dank RecyclerView v23.2.0 and blank space after swiping up

Obwohl, es nicht erklären, warum mein Code funktioniert gut, wenn exportiert in andere Projekte

Verwandte Themen