从AlertDialog输入向RecyclerView添加项目

时间:2017-01-28 01:55:16

标签: java android android-studio android-recyclerview adapter

在警报对话框中输入数据后,我目前无法向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();
    }
}

用于格式化recyclerview列表项的XML:

<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

这是我目前在添加第二个输入后看到的

2 个答案:

答案 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>

答案 1 :(得分:0)

我解决了我的问题。这与回收物品的相对布局的高度有关。它是在匹配父级,我切换到包装内容,它现在显示屏幕上的输入