在我的应用中..用户可以根据类别键入费用,如果他们有多个类别要键入,则有一个按钮允许用户点击显示另一组类别(红色矩形)框内容)在同一页面。
任何方法都可以做到这一点吗?
非常感谢。
我的布局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>
答案 0 :(得分: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
进行旋转,或者找到一种方法将所有内容放在一个LinearLayout
中,因为它的设计非常像你一样堆叠多行视图,没有额外的容器。