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 잘 작동하지만 때문에 항목
을 추가하는 동안 더 이상 애니메이션이 [I도 notifyItemRangeInserted()를 시도]를 notifyItemInserted (뭔가) 생각 UPDATE
는 키보드 (나는의 키보드 오버레이가 아닌하지만 화면 공간을 줄여 좋아 know..it하지 않음) 항목을 렌더링하기 위해 적은 공간이 개방과 같습니다
매니 페스트의 활동에서 이것을 찾으세요. android : configChanges = "keyboardHidden – Aiapaec
아무 것도 변경하지 않았습니다. – ozzem
'this.mSortedList.add (nuovoProdotto);가 실제로 onInserted 또는 onChanged를 트리거합니까? – kalabalik