0

在我的应用程序中.. 用户可以根据类别输入费用,如果他们有多个类别要输入,则有一个按钮允许用户单击以显示另一组类别(红色矩形框内容)在同一页面中。

任何方法都可以做到这一点?

非常感谢你。

费用页面截图

我的布局 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f8f9fe"
android:orientation="vertical" >

<include layout="@layout/actionbar_layout" />

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/recordExpenses"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="15dip"
        android:text="@string/expensesRecord"
        android:textColor="#ff29549f"
        android:textSize="25dip"
        android:textStyle="bold" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/recordDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.59"
        android:text="@string/date"
        android:textSize="25sp" />

    <Spinner
        android:id="@+id/recordDaySpinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.84"
        android:entries="@array/daySpinner" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/recordCategory"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/category"
        android:textSize="25sp" />

    <Spinner
        android:id="@+id/recordCategorySpinner"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1" 
        android:entries="@array/categorySpinner"/>

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/recordRM"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.00"
        android:text="@string/rm"
        android:textSize="25sp" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="99dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="number" >

        <requestFocus />
    </EditText>
</LinearLayout>

<Button
    android:id="@+id/recordAddCategory"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/addCategory" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/total"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/total"
        android:textSize="25sp" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/balance"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/balance"
        android:textSize="25sp" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/backButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/back" />

    <Button
        android:id="@+id/recordSaveButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/save" />

</LinearLayout>

4

1 回答 1

2

我花了一段时间,但我想我终于得到了你想要的。就我个人而言,我认为您这样做的方式是将该部分实现为listView动态表格布局。我用 listView 做了一个小模型,因为我认为使用它会不那么麻烦。

主要活动:

public class MainActivity extends Activity {

    private CustomAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        ListView lv = (ListView) findViewById(R.id.listView1);
        adapter = new CustomAdapter(this);
        lv.setAdapter(adapter);

        Button btnAdd_category = (Button) findViewById(R.id.recordAddCategory);
        btnAdd_category.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                adapter.addRow();
            }
        });
    }

listView 的自定义适配器

public class CustomAdapter extends BaseAdapter {

    int rowCount = 1;
    private LayoutInflater inflator;

    public CustomAdapter(Context context) {
        super();
        inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return rowCount;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int postion, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflator.inflate(R.layout.row, parent, false);            
        }
        return convertView;
    }

    public void addRow() {
        rowCount++;
        notifyDataSetChanged();
    }
}

如您所见,整个机制取决于getCount()方法。当您添加或减少它返回的数字时,它会告诉适配器您想要膨胀多少行。为了修改它,我们创建了一个名为addRow(). 其余的应该是不言自明的。此处膨胀的rowxml 只是您希望在按下按钮时重复的红色框线布局。我建议将整个页面放在 a 中,ScrollView因为如果额外的行使视图超出范围,您将需要它。


此外,这与您的问题无关,但我认为您重新考虑您的 xml 布局。一般来说,使用LinearLayout比您可以管理的更多的视图组(等)效率要低得多。或许,如果您愿意,不妨试一试,RelativeLayout或想办法将所有东西装箱LinearLayout,因为它是专为堆叠多行视图而设计的,就像您拥有的一样,无需额外的容器。

于 2012-12-01T15:40:40.220 回答