2017-12-21 21 views
0

recyclerview에 gridlayout을 사용했습니다. 그것은 효과가 있지만 부작용이 있습니다. AutoCompleteTextView를 사용하여 정렬 된 목록에 항목을 추가했습니다. 새 아이템을 추가 할 때 올바른 위치에 추가되었지만 카드 사이에는 여백이 없습니다. 소프트 키가 사라지면 마진이 올바르게됩니다. 내 상황과 내가 작성한 코드를 명확히하기 위해 gif를 추가합니다.Android GridLayout - 소프트 키의 여백 변경이 사라짐

prod_grid.xml

<android.support.v7.widget.CardView 
android:id="@+id/card_prodotto_inlista" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="100dp" 
android:layout_height="wrap_content" 
card_view:cardUseCompatPadding="true" 
card_view:cardCornerRadius="8dp" 
android:layout_marginBottom="16dp"> 

<RelativeLayout 
    android:id="@+id/relativeallinlista" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_margin="5dp" 
     android:id="@+id/imageProdotto_lista_prodotti" 
     android:layout_width="48dp" 
     android:layout_height="wrap_content" 
     android:contentDescription="@string/action_settings" 
     android:src="@mipmap/avocado" 
     android:scaleType="centerCrop" 
     android:layout_centerHorizontal="true"/> 

    <TextView 
     android:id="@+id/nomeprodotto_lista_prodotti" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="13sp" 
     android:text="nome" 
     android:textColor="@color/colorBackroundWhite" 
     android:gravity="center" 
     android:layout_below="@+id/imageProdotto_lista_prodotti" 
     android:paddingBottom="8dp" 
     android:paddingTop="8dp" 
     android:layout_alignParentBottom="true" 
     android:background="@color/colorPrimary"/> 

</RelativeLayout> 

InserireInListaAdapter.java

import android.support.v7.util.SortedList; 
import android.support.v7.widget.CardView; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import java.util.Comparator; 
import java.util.List; 
import it.coinquilinaggio.roomate.R; 

public class InserireInListaAdapter extends RecyclerView.Adapter<InserireInListaAdapter.InserireInListaAdapterHolder> { 

private List<ProdottiListaInfo> listaSpesa; 
private Comparator<ProdottiListaInfo> comparatore; 
private ProdottiInListaInterface prodottiInListaActivity; 

private final SortedList<ProdottiListaInfo> mSortedList = new SortedList<>(ProdottiListaInfo.class, new SortedList.Callback<ProdottiListaInfo>() { 
    @Override 
    public void onInserted(int position, int count) { 
     notifyItemInserted(position); 

    } 

    @Override 
    public void onRemoved(int position, int count) { 
     notifyItemRangeRemoved(position, count); 
    } 

    @Override 
    public void onMoved(int fromPosition, int toPosition) { 
     notifyItemMoved(fromPosition, toPosition); 
    } 

    @Override 
    public int compare(ProdottiListaInfo o1, ProdottiListaInfo o2) { 
     return comparatore.compare(o2, o1); 
    } 

    @Override 
    public void onChanged(int position, int count) { 
     notifyItemRangeChanged(position, count); 
    } 

    @Override 
    public boolean areContentsTheSame(ProdottiListaInfo oldItem, ProdottiListaInfo newItem) { 
     return oldItem.equals(newItem); 
    } 

    @Override 
    public boolean areItemsTheSame(ProdottiListaInfo item1, ProdottiListaInfo item2) { 
     return item1.getNome_prodotto_lista().equalsIgnoreCase(item2.getNome_prodotto_lista()); 
    } 
}); 



public InserireInListaAdapter(List<ProdottiListaInfo> listaSpesa, Comparator<ProdottiListaInfo> comparatore, ProdottiInListaInterface prodottiInListaActivity) { 

    this.listaSpesa = listaSpesa; 
    this.comparatore= comparatore; 
    mSortedList.addAll(listaSpesa); 
    this.prodottiInListaActivity=prodottiInListaActivity; 
    this.prodottiInListaActivity.setSortedList(mSortedList); 

} 




@Override 
public InserireInListaAdapterHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View itemView = LayoutInflater. 
      from(parent.getContext()). 
      inflate(R.layout.prod_grid, parent, false); 
    return new InserireInListaAdapterHolder(itemView); 
} 

@Override 
public void onBindViewHolder(final InserireInListaAdapterHolder holder, final int position) { 
    final ProdottiListaInfo item = mSortedList.get(position); 
    holder.nome_prodotto.setText(item.getNome_prodotto_lista()); 
    holder.immagine_prodotto.setImageResource(item.getImg()); 
} 

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

public static class InserireInListaAdapterHolder extends RecyclerView.ViewHolder { 
    public TextView nome_prodotto; 
    public ImageView immagine_prodotto; 
    public CardView cardView; 


    public InserireInListaAdapterHolder(View v) { 
     super(v); 
     nome_prodotto = (TextView)itemView.findViewById(R.id.nomeprodotto_lista_prodotti); 
     immagine_prodotto = (ImageView)itemView.findViewById(R.id.imageProdotto_lista_prodotti); 
     cardView = (CardView)v.findViewById(R.id.card_prodotto_inlista); 
    } 
} 
} 

ProdottiInListaActivity.java

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.util.SortedList; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.text.Editable; 
import android.view.KeyEvent; 
import android.view.inputmethod.EditorInfo; 
import android.widget.AutoCompleteTextView; 
import android.widget.TextView; 
import java.util.Comparator; 
import java.util.List; 

public class ProdottiInListaActivity extends AppCompatActivity implements ProdottiInListaInterface { 

private RecyclerView recyclerView; 
private InserireInListaAdapter mAdapter; 
private List<ProdottiListaInfo> lista; 
private SortedList<ProdottiListaInfo> mSortedList; 


private static final Comparator<ProdottiListaInfo> comparatore = new Comparator<ProdottiListaInfo>() { 
    @Override 
    public int compare(ProdottiListaInfo o1, ProdottiListaInfo o2) { 
     return o1.getDataInserimento().compareTo(o2.getDataInserimento()); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_prodotti_in_lista); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    GridLayoutManager lLayout = new GridLayoutManager(getApplicationContext(), 4); 


    lista = FakeLista.createList(1); 

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

    mAdapter = new InserireInListaAdapter(lista,comparatore, this); 

    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(lLayout); 
    recyclerView.setAdapter(mAdapter); 




    final AutoCompleteTextView aggiungiPdodottoEditText = (AutoCompleteTextView) findViewById(R.id.aggiungiProdottoEditText); 

    aggiungiPdodottoEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       aggiungiProdotto(aggiungiPdodottoEditText.getText()); 
       aggiungiPdodottoEditText.getText().clear(); 
       aggiungiPdodottoEditText.clearFocus(); 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

private void aggiungiProdotto(Editable text) { 

    ProdottiListaInfo nuovoProdotto = FakeLista.createList(1).get(0); 
    nuovoProdotto.setNome_prodotto_lista(text.toString()); 

    this.mSortedList.add(nuovoProdotto); 
    this.recyclerView.smoothScrollToPosition(0); 

} 

@Override 
public boolean setSortedList(SortedList<ProdottiListaInfo> mSortedList) { 

    this.mSortedList = mSortedList; 
    return true; 
} 
} 

는 나는 내가 사용하는 경우 notifyDataSetChanged 잘 작동하지만 때문에 항목

enter image description here

을 추가하는 동안 더 이상 애니메이션이 [I도 notifyItemRangeInserted()를 시도]를 notifyItemInserted (뭔가) 생각 UPDATE

는 키보드 (나는의 키보드 오버레이가 아닌하지만 화면 공간을 줄여 좋아 know..it하지 않음) 항목을 렌더링하기 위해 적은 공간이 개방과 같습니다

+0

매니 페스트의 활동에서 이것을 찾으세요. android : configChanges = "keyboardHidden – Aiapaec

+0

아무 것도 변경하지 않았습니다. – ozzem

+0

'this.mSortedList.add (nuovoProdotto);가 실제로 onInserted 또는 onChanged를 트리거합니까? – kalabalik

답변

0

해결책을 찾았습니다. android : layout_width = "100dp"android : layout_width = "wrap_content"