Как добавить составной элемент управления в макет во время выполнения? - PullRequest
0 голосов
/ 12 августа 2011

Я создал составной элемент управления, используя xml, и могу повторно использовать его, поместив в другой xml макеты. Но я хочу добавить его во время выполнения, используя код Java. Я пробовал следующий код, но виден только текстовый вид, а составной элемент управления не отображается ...

Я тихий новичок в Android, поэтому буду признателен за любую помощь или предложения ..

СОЕДИНЕНИЕ - ПЛАН УПРАВЛЕНИЯ

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/border_lines"

>
    <TextView android:id="@+id/msg_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="SAMPLE MESSAGE TITLE"
    />
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    >
        <Button android:id="@+id/btn_shw"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:text="SHOW MSG"
            android:layout_weight="1"
        />
        <Button android:id="@+id/btn_dis"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:text=" DISABLE"
            android:layout_weight="1"
        />
        <Button android:id="@+id/btn_del"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:text=" DELETE "
            android:layout_weight="1"
        />
    </LinearLayout>    
</LinearLayout>

КОД УПРАВЛЕНИЯ СОЕДИНЕНИЕМ

public class RemainderControl extends LinearLayout
{
    Button btn1,btn2,btn3;
    TextView tv1;
    public RemainderControl(Context context)
    {
        super(context);
            LayoutInflater inflater=LayoutInflater.from(context);
        inflater.inflate(R.layout.remainder_control,this);

        loadviews();
    }

    public RemainderControl(Context context,AttributeSet attrs)
    {
        super(context,attrs);

        LayoutInflater inflater=LayoutInflater.from(context);
        inflater.inflate(R.layout.remainder_control,this);

        loadviews();


    }

    private void loadviews()
    {
        btn1=(Button)findViewById(R.id.btn_shw);
        btn2=(Button)findViewById(R.id.btn_dis);
        btn3=(Button)findViewById(R.id.btn_del);
        tv1=(TextView)findViewById(R.id.msg_title);
            btn1.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                tv1.setText("SHOW BUTTON PRESSED");     
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                tv1.setText("DISABLE BUTTON PRESSED");      
            }
        });
        btn3.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                tv1.setText("DELETE BUTTON PRESSED");
            }
        });
        tv1.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                tv1.setText("");
            }
        });
    }
}

КОД ДЛЯ ДОБАВЛЕНИЯ КОНТРОЛЯ

public class RemainderList extends Activity 
{
    ScrollView sv1;
    LinearLayout ll1;
    deepak.android.remainder.RemainderControl rc1;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        int ht=LayoutParams.WRAP_CONTENT;
        int wt=LayoutParams.FILL_PARENT;

        sv1=new ScrollView(this);
        ll1=new LinearLayout(this);
        ll1.setOrientation(LinearLayout.VERTICAL);
        sv1.addView(ll1);

        TextView tv1=new TextView(this);
        tv1.setText("THIS IS SAMPLE TEXT");
        ll1.addView(tv1,new LinearLayout.LayoutParams(wt,ht));

        rc1=new deepak.android.remainder.RemainderControl(this);
        ll1.addView(rc1,new LinearLayout.LayoutParams(wt,ht));

        setContentView(sv1);
    }
}

1 Ответ

3 голосов
/ 12 августа 2011

Когда ваш элемент управления включен в xml, вызывается конструктор public RemainderControl(Context context,AttributeSet attrs). Но в вашем коде вы напрямую вызываете конструктор public RemainderControl(Context context). Переместите весь свой код, который раздувает макет и устанавливает слушателей в некоторый метод (например, init()), и вызывайте его в обоих конструкторах.

...