0

データベースから取得した写真のグリッドを表示する必要があります。ユーザーの画面サイズに応じて、表示する写真の数を増やしたり減らしたりしたいと考えています。

1)データベースからの写真の数に応じて、表示される写真の数を動的に変更する方法は?

1a) どのレイアウトが適切ですか?

2) 1 つの画面に収まりきらないほど多くの写真がある場合は、明らかにスクロールする必要があります。少しずつスクロールするのではなく、ページ単位のスクロールを定義するにはどうすればよいですか。つまり、スクロールするたびに、次のページにすべての新しいメンバーが含まれます (Android でアプリケーションをスクロールするのと同じように)。

現時点では、メイン アクティビティ用の TabHost レイアウトと、グリッド タイプの表示アクティビティ用の LinearLayout があります。

API バージョン 10 を使用しているため、GridLayout は使用できません。

どんな提案も非常に役に立ちます。前もって感謝します。

4

2 に答える 2

1

1) How to change the number of pictures shown dynamically according to the number of pics from the database?

この部分に関する限り、データベースで使用可能な写真の数に基づいて for ループを使用します。必要なのは、データベースに存在する要素の数を知ることだけです。これをnumberOfElementsここで使用したように使用します。

 for(int i = 1; i <= numberOfElements ; i++) {

    LinearLayout lHor = new LinearLayout(this);
    lHor.setOrientation(LinearLayout.HORIZONTAL);
    //lHor.setBackgroundColor(Color.rgb(238,    233,    191));

    // Text View
    TextView tv = new TextView(this);
    tv.setText("FAULT "+i);
    tv.setTextSize(20);
    // tv.setGravity(Gravity.CENTER);
    tv.setTextColor(Color.rgb(255,255,255));
    tv.setPadding(12, 12, 12, 12);
    tv.setId(i);
    tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));
    lHor.addView(tv);       // Adding the TextView to the LinearLayout

    //CheckBox
    CheckBox cb = new CheckBox(this);
    cb.setId(i);
    cb.setTag("CheckBox");
    cb.setClickable(false);
    //  cb.setChecked(true);
    cb.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));
    cb.setGravity(Gravity.CENTER);
    checkBoxes.add(cb);
    lHor.addView(cb);
    l.addView(lHor);

}

データベース内の要素の数を取得する方法を既に知っているかもしれませんが、そうでない場合はこれを使用しました

    // Method 3: Getting total number of entries present in the database
    public int getTotalNumberOfEntries() {
        String[] columns = new String[]{ KEY_ROWID, KEY_TYPE, KEY_DATE};

        Cursor c = myDataBase.query(DATABASE_TABLE, columns, null, null, null, null, null);
        int count = 0;

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
                count++;
            }
        c.close();
        return count;
    }

==========編集================

アクティビティの onCreate() メソッドでこのメソッドを呼び出すことができます

private void setDynamicContentViewOfThisPage() {

// Defining the Scroll View and the LinearLayout
ScrollView sv = new ScrollView(this);
LinearLayout l = new LinearLayout(this);
l.setOrientation(LinearLayout.VERTICAL);
sv.addView(l);

// You will need to collect data from the previous Intent :-)

    TextView introduction = new TextView(this);
    introduction.setText("Set Text Here");
    introduction.setGravity(Gravity.LEFT);
    introduction.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    l.addView(introduction);


    Button instructionsButton = new Button(this);
    instructionsButton.setTag("Some Button");
    instructionsButton.setId(987654321);    // Random ID set to avoid conflicts :-D
    instructionsButton.setText("Click to read all the instructions");
    instructionsButton.setGravity(Gravity.CENTER);
    instructionsButton.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    l.addView(instructionsButton);

    instructionsButton.setOnClickListener(this);


                     // Creates a line
                        TableLayout tl1 = new TableLayout(this);
                            View v1 = new View(this);
                            v1.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 1));
                            v1.setBackgroundColor(Color.rgb(51, 51, 51));
                            tl1.addView(v1);
                        l.addView(tl1);

                    // Version 2 (Creating Different Layouts)        
                            for(int i = 1; i <= 3 ; i++) {
                                // Creates a line
                                TableLayout tl2 = new TableLayout(this);
                                    View v2 = new View(this);
                                    v2.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 1));
                                    v2.setBackgroundColor(Color.rgb(51, 51, 51));
                                    tl2.addView(v2);
                                l.addView(tl2);

                                LinearLayout lHor = new LinearLayout(this);
                                lHor.setOrientation(LinearLayout.HORIZONTAL);
                                //lHor.setBackgroundColor(Color.rgb(238,    233,    191));

                                    LinearLayout lVer1 = new LinearLayout(this);
                                    lVer1.setOrientation(LinearLayout.VERTICAL);
                                    lVer1.setGravity(Gravity.RIGHT);
                                    lVer1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));

                                        // Text View
                                        TextView tv = new TextView(this);
                                        tv.setText("TV "+i);
                                        tv.setTextSize(20);
//                                          tv.setGravity(Gravity.CENTER);
                                        tv.setTextColor(Color.rgb(255,255,255));
                                        tv.setPadding(12, 12, 12, 12);
                                        tv.setId(i);
//                                          tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));
                                        lVer1.addView(tv);      // Adding the TextView to the LinearLayout

                                        //CheckBox
                                        CheckBox cb = new CheckBox(this);
                                        cb.setClickable(false);
//                                          cb.setChecked(true);
                                        cb.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));
                                        cb.setGravity(Gravity.CENTER);
                                        lVer1.addView(cb);

                                 lHor.addView(lVer1);

                                    LinearLayout lVer = new LinearLayout(this);
                                    lVer.setOrientation(LinearLayout.VERTICAL);
                                    lVer.setGravity(Gravity.RIGHT);
                                    lVer.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));

                                        Button showsomeOtherButton = new Button(this);
                                        showsomeOtherButton.setTag("showSomeButton");
                                        showsomeOtherButton.setId(i);
                                        showsomeOtherButton.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));
                                        showsomeOtherButton.setText("View Image");
//                                          showsomeOtherButton.setEnabled(false);
                                        lVer.addView(showsomeOtherButton);

                                        Button someOtherDataButton = new Button(this);
                                        someOtherDataButton.setId(i);
                                        someOtherDataButton.setTag("someOtherButton");
                                        someOtherDataButton.setText("Do this action " + i);
//                                          someOtherDataButton.setEnabled(false);
                                        someOtherDataButton.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));
                                        lVer.addView(someOtherDataButton);

                                        showsomeOtherButton.setOnClickListener(this);
                                        someOtherDataButton.setOnClickListener(this);

                                lHor.addView(lVer);
                                l.addView(lHor);

                                // Creates a line
                                TableLayout tl3 = new TableLayout(this);
                                    View v3 = new View(this);
                                    v3.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 1));
                                    v3.setBackgroundColor(Color.rgb(51, 51, 51));
                                    tl3.addView(v3);
                                l.addView(tl3);

                               }

                            // Creates a line
                            TableLayout tl3 = new TableLayout(this);
                                View v3 = new View(this);
                                v3.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 1));
                                v3.setBackgroundColor(Color.rgb(51, 51, 51));
                                tl3.addView(v3);
                            l.addView(tl3);

        Button nextPageButton = new Button(this);
        nextPageButton.setTag("goToNExtPageButton");
        nextPageButton.setId(98765432);
        nextPageButton.setText("Go To Next Page");
        nextPageButton.setGravity(Gravity.CENTER);
        //nextPageButton.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        layoutParams.gravity=Gravity.CENTER;
        nextPageButton.setLayoutParams(layoutParams);

        l.addView(nextPageButton);

// Set the content View to this
    this.setContentView(sv);    
}
}
于 2012-06-11T12:30:06.430 に答える
0
  1. LinearLayout を使用して問題を解決しました。次を使用して動的にビューを追加しました。

    LinearLayout parentLayout = (LinearLayout) findViewById(R.id.parentLayout);
    TextView ChildView = new TextView(getApplicationContext());
    ChildView.setText("I am the child");
    parentLayout.addView(ChildView);
    

    Sumit の提案に従って、利用可能なビューまでループします。

  2. アクティビティのレイアウト全体を ScrollView で囲む必要があり、動的レイアウトで見えない子を補う必要がありました

于 2012-12-13T10:23:57.753 に答える