2017-01-28 191 views
3

在alertdialog框中輸入數據後,我現在在添加第二個+項目到RecyclerView時遇到問題。從AlertDialog輸入項中將項目添加到RecyclerView

我可以輸入1組數據,但是當我嘗試添加更多數據時,它不會執行任何操作。

這是我的工作片段我的Java文件:

public class tab1Expenses extends Fragment { 
    List<ExRow> expenseList = new ArrayList(); 
    RecyclerView recyclerView; 
    ExpensesAdapter mAdapter; 
    Button btnEx; 
    EditText txtExName; 
    EditText txtExAmount; 

    public void expenseData() { 
     String Na = txtExName.getText().toString(); 
     String Am = txtExAmount.getText().toString(); 

     ExRow exs = new ExRow(Na, Am); 
     expenseList.add(exs); 

     mAdapter.notifyDataSetChanged(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

     final View rootView = inflater.inflate(R.layout.tab1expense, container, false); 
     btnEx = (Button) rootView.findViewById(R.id.btnEx); 
     recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 

     mAdapter = new ExpensesAdapter(expenseList); 
     final RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext()); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(mAdapter); 

     btnEx.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       View view = LayoutInflater.from(tab1Expenses.this.getActivity()) 
        .inflate(R.layout.add_ex, null); 
       txtExName = (EditText) view.findViewById(R.id.exName); 
       txtExAmount = (EditText) view.findViewById(R.id.exAmount); 

       AlertDialog.Builder add = new AlertDialog.Builder(tab1Expenses.this.getActivity()); 
       add.setCancelable(true) 
        .setTitle("Enter Expense:") 
        .setView(view) 
        .setPositiveButton("Add", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          expenseData(); 
         } 
        }); 
       Dialog dialog = add.create(); 
       dialog.show(); 
      } 
     }); 

     return rootView; 
    } 
} 

而對於適配器的Java文件:

public class ExpensesAdapter extends RecyclerView.Adapter<ExpensesAdapter.MyViewHolder> { 
    private List<ExRow> expenseList; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView title, amount; 

     public MyViewHolder(View view) { 
      super(view); 
      title = (TextView) view.findViewById(R.id.name); 
      amount = (TextView) view.findViewById(R.id.amount); 
     } 
    } 

    public ExpensesAdapter(List<ExRow> expenseList) { 
     this.expenseList = expenseList; 
    } 

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

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     ExRow expense = expenseList.get(position); 
     holder.title.setText(expense.getTitle()); 
     holder.amount.setText(expense.getAmount()); 
    } 

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

的XML格式化recyclerview列表項:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/name" 
    android:textColor="@color/title" 
    android:textSize="16dp" 
    android:textStyle="bold" 
    android:layout_alignParentLeft="true" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<TextView 
    android:id="@+id/amount" 
    android:textColor="#000000" 
    android:layout_width="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_height="wrap_content" /> 
</RelativeLayout> 

這是用於片段的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.ojemz.expensetracker.tab1Expenses" 
android:background="@android:color/darker_gray"> 

<Button 
    android:text="Add Expense" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/btnEx" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:width="800dp" 
    android:textAppearance="@style/TextAppearance.AppCompat.Widget.Switch" 
    android:background="@android:color/black" 
    android:textColor="@android:color/holo_green_light" 
    android:textColorLink="@android:color/holo_green_light" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 


      <android.support.v4.widget.NestedScrollView 
      android:layout_width="match_parent" 
      android:layout_height="450dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginBottom="17dp"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="450dp" 
      android:scrollbars="vertical" 
      android:keepScreenOn="true" 
      android:isScrollContainer="true" /> 

     </android.support.v4.widget.NestedScrollView> 
    </LinearLayout> 

This is how im inputting information This is what I currently see AFTER adding a 2nd input

這是我目前看到之後加入第二個輸入

+0

這很奇怪。也許,我沒有注意到,但這個代碼必須工作。它是一個完整的適配器代碼? –

+0

我相信這是 – Corpse

+0

請檢查它是否只將空項目添加到'RecyclerView'(沒有文本)。 –

回答

0

我解決了我的問題。這與回收商物品相對佈局的高度有關。這是在匹配父,我切換到包裝內容,它現在顯示在屏幕上的輸入

+0

所以,它只是添加了一個空的物品(它更真實,隱形物品)=) –

1

你不能這樣做:

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginBottom="17dp"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:scrollbars="vertical" /> 

</ScrollView> 

RecyclerView具有高度爲0了。您需要爲其添加一些固定高度並設置滾動行爲。或者您可以使用NestedScrollView或寫入LayoutManager的全高度擴展。 有關詳細信息,請參閱this thread

ADDED
使用該XML的,而不是你的,但我寫的沒有IDE,因此它可以包含一些錯誤。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.ojemz.expensetracker.tab1Expenses" 
    android:background="@android:color/darker_gray"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbars="vertical" 
      android:keepScreenOn="true" /> 

     <Button 
      android:text="Add Expense" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/btnEx" 
      android:layout_gravity="bottom|center_horizontal" 
      android:textAppearance="@style/TextAppearance.AppCompat.Widget.Switch" 
      android:background="@android:color/black" 
      android:textColor="@android:color/holo_green_light" 
      android:textColorLink="@android:color/holo_green_light" /> 
</FrameLayout> 
+0

我做到了。我將高度設置爲800dp並匹配父項並使用NestedScrollView,並且仍然只能獲得1項。之後的任何項目不會出現 – Corpse

+0

請發佈新變種。而且,您爲內部視圖使用錯誤的xml標記,這些標記在此上下文中不起作用。 –

+0

什麼是你使用這個'ScrollView'。你有沒有意見?張貼他們也是。 –