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()。残りは一目瞭然です。ここrowでインフレートされている xml は、ボタンを押したときに繰り返したい赤いボックスの linearLayout です。ScrollView追加の行によってビューが範囲外になる場合に必要になるため、ページ全体を に配置することをお勧めします。


さらに、これはあなたの質問とは関係ありませんが、xml レイアウトを再考していると思います。一般に、なくても管理できるよりも多くの viewGroups (LinearLayoutなど) を使用すると、効率が大幅に低下します。おそらく、よろしければ、試してみるRelativeLayoutか、すべてを 1 つにまとめる方法を見つけてLinearLayoutください。追加のコンテナーを使用せずに、複数のビュー行をスタックするように設計されているためです。

于 2012-12-01T15:40:40.220 に答える