Android - 如何堆叠动态添加的视图?

时间:2014-11-25 02:04:20

标签: java android view

我是Android上的新手,也是Google指南中的新手:http://developer.android.com/training/basics/data-storage/databases.html

是的,关于dabatase,但是为了实践,在我的虚拟学习应用程序中,我创建了一个简单的存储系统" profile"有东西存放在数据库中。基本上,我已经创建了一个Activity来填充一些文本字段并将其存储在数据库中。还有一个名为ProfileDao的类可以完成CRUD的工作。

我已经达到了一个点,我想使用LinearLayout构建一个活动来显示添加的所有配置文件。问题是我不能像XML一样在代码中堆叠视图。

这是一些代码: ProfileFragment类:

public final class ProfileFragment extends Fragment {
    private String _name;
    private String _gender;
    private int _age;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View retVal = inflater.inflate(R.layout.profile_fragment, container, false);
        final TextView _nameField = (TextView) retVal.findViewById(R.id.profile_fragment_name);
        final TextView _genderField = (TextView) retVal.findViewById(R.id.profile_fragment_gender);
        final TextView _ageField = (TextView) retVal.findViewById(R.id.profile_fragment_age);

        _nameField.setText(_name);
        _genderField.setText(_gender);
        _ageField.setText(String.valueOf(_age));

        return retVal;
    }

    public void setName(String name) { _name = name; }
    public void setGender(String gender) { _gender = gender;}
    public void setAge(int age) { _age = age; }

    public String getName() { return _name; }
    public String getGender() { return _gender; }
    public int getAge() { return _age; }
}

我最初的意图是使用这个片段将其置于LinearLayout中,但我很快就看到我无法做到这一点,并使这个类只是一个用于返回视图的工具。

SeeProfilesActivity:

public class SeeProfilesActivity extends Activity {
    private static final String TAG = makeLogTag(SeeProfilesActivity.class);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.see_profiles_activity);

        final ProfileDao profDao = new ProfileDao(new ProfileDbHelper(this));
        final List<Profile> profiles = profDao.getProfiles();
        LOGD(TAG, "PROFILES RETRIEVED");

        if(profiles.size() == 0) {
            final TextView thereisNotProfiles = new TextView(this);
            thereisNotProfiles.setText(getString(R.string.there_is_not_profiles));
            thereisNotProfiles.setTextSize(35);

            LOGD(TAG, "NO PROFILES, SO JUST DISPLAY THERE IS NOT");

            setContentView(thereisNotProfiles);
            return;
        }

        addFragmentProfiles(profiles);
    }

    private void addFragmentProfiles(List<Profile> profiles) {
        final LinearLayout itLayout = (LinearLayout) ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
        itLayout.setOrientation(LinearLayout.VERTICAL);
        View currView;

        for(Profile prof : profiles) {
            final ProfileFragment profFrag = new ProfileFragment();

            profFrag.setName(prof.getName());
            profFrag.setGender(prof.getGender());
            profFrag.setAge(prof.getAge());

            LOGD(TAG, "WELL, ONE PROFILE WAS RETRIEVED");

            currView = profFrag.onCreateView(getLayoutInflater(), itLayout, null);
            itLayout.addView(currView);//here is my problem
            LOGD(TAG, "SUCCESS IN DISPLAY");
        }

    }
}

如何重现在代码中堆叠LinearLayout XML中存在的视图的行为?

在提出异议之前:

  • 我知道有些人会说那是更好的方法,主要是经验丰富的开发人员(可能会说我可以使用ListView和适配器。是的,我知道,但我没有达到这个目的指南的一部分)。但是,事实上,我是一个非常新鲜的初学者,并且真的想亲手做到这一点,以享受最大限度的学习。

1 个答案:

答案 0 :(得分:0)

更改片段布局“profile_fragment”高度为wrap_content,不填充或匹配父级。 我的英语不太好,我希望你能理解......

R.Layout.profile_fragment:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" // This is your problem.
    android:orientation="vertical" >