2016-02-25 57 views
0

我有一個AutoCompleteTextView和按鈕的活動,並在它下面,隱藏RecyclerView,啓動空的(沒有行)。添加一行到一個空recyclerview的執行時間

隨着AutoCompleteTextView,我選擇一個對象,我想要的是,當我點擊按鈕,將該對象添加到RecyclerView(並打開回收站的可見性)。

到目前爲止,我已經成功地將對象添加到回收站的數據集,但它不會顯示在notifyDataSetChanged()任何行。

佈局:

<android.support.v4.widget.NestedScrollView 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="16dp"> 
<ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:id="@+id/ib_add" 
     android:src="@drawable/ic_add_black" 
     android:onClick="onAddClick"/> 

<AutoCompleteTextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/actv_input" 
     android:layout_toLeftOf="@+id/ib_add" 
     android:layout_toStartOf="@+id/ib_add" 
     android:hint="@string/name_hint"/> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="gone"/> 
</RelativeLayout> 
</android.support.v4.widget.NestedScrollView> 

的活性(就在相關的功能):

@Bind(R.id.rv) RecyclerView rv; 

ArrayList<Ing> ings = new ArrayList<>(); 
ArrayList<Ing> selectedIngs = new ArrayList<>(); 

private void setupRecyclers() { 
    rv.setLayoutManager(new LinearLayoutManager(this)); 
    rv.setAdapter(new RecyclerViewAdapter(selectedIngs)); 
} 

public void onAddClick(View view) { 
    Ing ing = ings.get(selectedPosition); 
    rv.setVisibility(View.VISIBLE); 
    selectedIngs.add(ing); 
    ((RecyclerViewAdapter)rv.getAdapter()).addIng(ing); 
} 

的RecyclerViewAdapter:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RViewHolder> { 

ArrayList<Ing> ings; 

public RecyclerViewAdapter(ArrayList<Ing> ings) { 
    this.ings = ings; 
} 

@Override 
public RViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_ing, parent, false); 
    return new RViewHolder(row); 
} 

@Override 
public void onBindViewHolder(RViewHolder holder, int position) { 
    Ing ing = ings.get(position); 
    holder.bindToView(ing); 
} 

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

public void addIng(Ing ing) { 
    ings.add(ing); 
    notifyDataSetChanged(); 
} 

public void setDataSet(ArrayList<Ing> ings) { 
    this.ings = ings; 
    notifyDataSetChanged(); 
} 
} 

的RecyclerViewHolder:

public class RViewHolder extends RecyclerView.ViewHolder { 

Ing ing; 
ImageView ivIcon; 
TextView tvName; 
ImageButton ibRemove; 
TextView tvPercentage; 
EditText etPercentage; 

public RViewHolder(View row) { 
    super(row); 

    bindFields(row); 
} 

private void bindFields(View view) { 

    ivIcon = (ImageView) view.findViewById(R.id.iv_icon_type); 
    tvName = (TextView) view.findViewById(R.id.tv_ing); 
    ibRemove = (ImageButton) view.findViewById(R.id.btn_remove); 
    tvPercentage = (TextView) view.findViewById(R.id.tv_percentage); 
    etPercentage = (EditText) view.findViewById(R.id.et_percentage); 

} 

public void bindToView(Ing ing){ 
    this.ing = ing; 

    tvName.setText(ing.getName()); 
    ivIcon.setImageResource(R.drawable.icon); 
    tvName.setVisibility(View.VISIBLE); 
    ivIcon.setVisibility(View.VISIBLE); 
    ibRemove.setVisibility(View.VISIBLE); 
    tvPercentage.setVisibility(View.VISIBLE); 
    etPercentage.setVisibility(View.VISIBLE); 
} 
} 

我錯過了什麼? 謝謝!

+0

你可以在你的xml中顯示根元素..?您無需設置可見性,因爲當列表爲空時,無論如何都看不到回收站視圖。 –

+0

也正在添加項目兩次以列表 –

+0

@RaviTeja嗨,我已經做了我的項目的一些測試,我已經從他們收集到的是,不管是什麼,該onBindViewHolder方法不會被調用。即使我在第一次調用之前將一個元素硬編碼到數組中。我也嘗試過使用和不使用可見性設置,但它仍然以同樣的方式工作(不工作):P – mdlapla

回答

0

解決!

第一部分,所述再循環器不顯示甚至與元素內,固定由23.2.0支持庫的更新,介紹了自動測量recyclerviews。在此之前,如果你在一個嵌套內的親戚中有一個回收者,它做了一些有趣的事情,並且從未初始化回收商內部的行。

第二部分,不添加行的按鈕是因爲即使您在圖像按鈕中設置了一些onclick事件,它看起來必須將android:clickable = true,否則它將不起作用。

相關問題