プログラムでLinearLayoutにビューを追加し、1つを除くすべてにテキストを設定しない

ロック・リー

線形レイアウトがあり、可変数のリストアイテムを動的に追加したいと思います。(このリストはすでにリサイクラービューにあり、小さなリストであると想定されているため、リサイクラービューにすることはできません。)しかし、何らかの理由で、最後の項目を除いて設定したテキストが保存されません。別のタイトルで別のアイテムを追加した場合、最後に追加されたアイテムが表示され、他のアイテムには「デフォルト」と表示されます。誰かが何が起こっているのか知っていますか?本当に不思議です。ありがとう!

コードは次のとおりです。

settings_item.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="wrap_content"
    android:orientation="horizontal">

    <TextView
        style="?android:listSeparatorTextViewStyle"
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="#00000000"
        android:text="Default"
        android:layout_weight="1"/>

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="end|center_vertical"
        android:layout_weight="0"/>

</LinearLayout>

root_settings_view.xml

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

SettingsView.java:

public class SettingsView extends LinearLayout {

    //Views
    private View view;

    /**
     * Constructor for android tools to use.
     */
    public SettingsView(Context context) {
        super(context);
    }

    /**
     *
     * @param parent
     */
    public SettingsView(ViewGroup parent) {
        super(parent.getContext());

        //Get the inflated layout
        LinearLayout view = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.root_settings_view, parent, false);


        View itemView = LinearLayout.inflate(parent.getContext(), R.layout.settings_item, view);
        ((TextView) itemView.findViewById(R.id.title)).setText("Hi");
        ((CheckBox) itemView.findViewById(R.id.checkbox)).setChecked(true);


        View itemView2 = LinearLayout.inflate(parent.getContext(), R.layout.settings_item, view);
        ((TextView) itemView2.findViewById(R.id.title)).setText("Hello");
        ((CheckBox) itemView2.findViewById(R.id.checkbox)).setChecked(false);

        View itemView3 = LinearLayout.inflate(parent.getContext(), R.layout.settings_item, view);
        ((TextView) itemView3.findViewById(R.id.title)).setText("Bye");
        ((CheckBox) itemView3.findViewById(R.id.checkbox)).setChecked(true);

        View itemView4 = LinearLayout.inflate(parent.getContext(), R.layout.settings_item, view);
        ((TextView) itemView4.findViewById(R.id.title)).setText("Test");
        ((CheckBox) itemView4.findViewById(R.id.checkbox)).setChecked(false);

        addView(view);
    }

結果

ロック・リー

@Rod_Algonquinのコメントに感謝します。これにより、ウィジェットを作成する必要があると確信しました。幸いなことに、私は以前にウィジェットを作成したことがあるので、その方法を知っていました。私はそれを避けようとしていましたが、ウィジェットを使用しないと、IDの重複に問題があると思います。

次のコードはそれを機能させました:

新しいクラス、SettingItemView.javaを追加しました。

/**
 * A item view with the title and a checkbox.
 */
public class SettingItemView extends LinearLayout {

    private TextView mTitle;
    private CheckBox mCheckBox;

    public SettingItemView(Context context) {
        super(context);
        inflate(context, R.layout.settings_item, this);
        mTitle = (TextView) findViewById(R.id.title);
        mCheckBox = (CheckBox) findViewById(R.id.checkbox);
    }

    public void setTitle(String title) {
        mTitle.setText(title);
    }

    public void setCheckbox(boolean checked) {
        mCheckBox.setChecked(checked);
    }
}

このコンストラクタメソッドを変更しました:

/**
 *
 * @param parent
 */
public SettingsView(ViewGroup parent) {
        super(parent.getContext());

        //Get the inflated layout.
        LinearLayout view = LayoutInflater.from(getContext()).inflate(R.layout.root_settings_view, parent, false);


        SettingItemView itemView = new SettingItemView(parent.getContext());
        itemView.setTitle("Hi");
        itemView.setCheckbox(true);
        view.addView(itemView);

        SettingItemView itemView2 = new SettingItemView(parent.getContext());
        itemView2.setTitle("Hello");
        itemView2.setCheckbox(true);
        view.addView(itemView2);

        SettingItemView itemView3 = new SettingItemView(parent.getContext());
        itemView3.setTitle("Bye");
        itemView3.setCheckbox(true);
        view.addView(itemView3);

        addView(view);
    }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プログラムでテキストビューにテキストの色を設定する方法

分類Dev

プログラムでテキストの色をプライマリAndroidテキストビューに設定します

分類Dev

2つのテキストビューを垂直に配置してCardViewをプログラムで作成するにはどうすればよいですか?

分類Dev

プログラムで2つ以上のテキストフィールドをLinearLayout(水平)に並べて配置します

分類Dev

androidはプログラムでカスタム値をカスタムテキストビューに設定します

分類Dev

リストビューに追加される新しいアイテムにタグを設定しないでください

分類Dev

Android-プログラムで作成された多くのビューに(リソースにない)独自の整数IDを設定します

分類Dev

カスタム フォントを使用してテキスト ビューで太字と斜体のスタイルを設定する (プログラムで)

分類Dev

Swiftを使用してプログラムで動的テーブルビューセルにテキストラベルとボタンを追加する

分類Dev

プログラムでルート ビューをビュー コントローラーに追加すると、正しく配置されない

分類Dev

Androidでプログラム的に追加されるリストビューの動的な高さを設定します

分類Dev

プログラムで、1つのビューを上部の垂直線形レイアウトに設定し、別のビューを下部に設定するにはどうすればよいですか?

分類Dev

自動レイアウトを使用してサブビューをプログラムし、スーパービューの幅の50%を占めながら、高さを一定に保つにはどうすればよいですか?

分類Dev

プロバイダーを使用して、画面上のすべてのウィジェットではなく、1つのウィジェットにテキストを同時にナビゲートするにはどうすればよいですか?

分類Dev

制約を設定し、テキストサイズに比例してプログラムで画像を増やすにはどうすればよいですか?

分類Dev

Angular1.x-関数なしでフラグに基づいてテキストを設定します

分類Dev

複数行のテキストを含むスクロール可能なビューを設定しようとしていますが、アプリを実行すると、スクロール時に非常に遅くなります

分類Dev

プログラムでテキストビューの書体を設定するにはどうすればよいですか?

分類Dev

Android:プログラムでテキストまたはテキストビューIDを編集するを設定します

分類Dev

テーブルビューで機能しない制約をプログラムで設定する

分類Dev

プログラムで動的幅を持つようにNSTableCellViewとサブビューを設定します

分類Dev

android-プログラムでビューにIDを設定します

分類Dev

テンプレートビューとスラッグ定義を1つのビューに追加するにはどうすればよいですか?

分類Dev

リストビューでフォントサイズを取得し、プログラムで特定のアイテムを大きく設定する方法

分類Dev

リストビューアイテムの背景色をプログラムで設定します

分類Dev

プログラムで追加したテキストビューがConstraintLayoutに表示されない

分類Dev

テキストと画像を使用してLinearLayoutをプログラムで追加する

分類Dev

ASP.NET MVC 5 すべての System.NullReferenceExceptions を具体的にキャッチしてビューにリダイレクトして、プログラムがクラッシュしないようにするにはどうすればよいですか?

分類Dev

xpropでカスタムプロパティを設定し、そのプログラムを1行で開くにはどうすればよいですか?

Related 関連記事

  1. 1

    プログラムでテキストビューにテキストの色を設定する方法

  2. 2

    プログラムでテキストの色をプライマリAndroidテキストビューに設定します

  3. 3

    2つのテキストビューを垂直に配置してCardViewをプログラムで作成するにはどうすればよいですか?

  4. 4

    プログラムで2つ以上のテキストフィールドをLinearLayout(水平)に並べて配置します

  5. 5

    androidはプログラムでカスタム値をカスタムテキストビューに設定します

  6. 6

    リストビューに追加される新しいアイテムにタグを設定しないでください

  7. 7

    Android-プログラムで作成された多くのビューに(リソースにない)独自の整数IDを設定します

  8. 8

    カスタム フォントを使用してテキスト ビューで太字と斜体のスタイルを設定する (プログラムで)

  9. 9

    Swiftを使用してプログラムで動的テーブルビューセルにテキストラベルとボタンを追加する

  10. 10

    プログラムでルート ビューをビュー コントローラーに追加すると、正しく配置されない

  11. 11

    Androidでプログラム的に追加されるリストビューの動的な高さを設定します

  12. 12

    プログラムで、1つのビューを上部の垂直線形レイアウトに設定し、別のビューを下部に設定するにはどうすればよいですか?

  13. 13

    自動レイアウトを使用してサブビューをプログラムし、スーパービューの幅の50%を占めながら、高さを一定に保つにはどうすればよいですか?

  14. 14

    プロバイダーを使用して、画面上のすべてのウィジェットではなく、1つのウィジェットにテキストを同時にナビゲートするにはどうすればよいですか?

  15. 15

    制約を設定し、テキストサイズに比例してプログラムで画像を増やすにはどうすればよいですか?

  16. 16

    Angular1.x-関数なしでフラグに基づいてテキストを設定します

  17. 17

    複数行のテキストを含むスクロール可能なビューを設定しようとしていますが、アプリを実行すると、スクロール時に非常に遅くなります

  18. 18

    プログラムでテキストビューの書体を設定するにはどうすればよいですか?

  19. 19

    Android:プログラムでテキストまたはテキストビューIDを編集するを設定します

  20. 20

    テーブルビューで機能しない制約をプログラムで設定する

  21. 21

    プログラムで動的幅を持つようにNSTableCellViewとサブビューを設定します

  22. 22

    android-プログラムでビューにIDを設定します

  23. 23

    テンプレートビューとスラッグ定義を1つのビューに追加するにはどうすればよいですか?

  24. 24

    リストビューでフォントサイズを取得し、プログラムで特定のアイテムを大きく設定する方法

  25. 25

    リストビューアイテムの背景色をプログラムで設定します

  26. 26

    プログラムで追加したテキストビューがConstraintLayoutに表示されない

  27. 27

    テキストと画像を使用してLinearLayoutをプログラムで追加する

  28. 28

    ASP.NET MVC 5 すべての System.NullReferenceExceptions を具体的にキャッチしてビューにリダイレクトして、プログラムがクラッシュしないようにするにはどうすればよいですか?

  29. 29

    xpropでカスタムプロパティを設定し、そのプログラムを1行で開くにはどうすればよいですか?

ホットタグ

アーカイブ