1

これは新しいコードです。例外はスローされませんが、カスタム コントロールの "Second" が表示されません。これは新しいコードです:

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutRoot"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/L1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical" >

        <Button
            android:id="@+id/addButton"
            android:layout_width="74dp"
            android:layout_height="wrap_content"
            android:text="Add" />

        <EditText
            android:id="@+id/newEditText"
            android:layout_width="174dp"
            android:layout_height="wrap_content"
            android:layout_weight="3.24"
            android:ems="10"
            android:inputType="text" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/List"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    </LinearLayout>    
</LinearLayout>

これはカスタム コントロールです: second.xml:

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

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/expandButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.44" 
                android:text = "Expand"/>

            <TextView
                android:id="@+id/txtView"
                android:layout_width="253dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.56"
                android:ems="10" 
                android:text = "LOL"/>  
        </LinearLayout>

        <RadioGroup
            android:id="@+id/ratingRadioGroup"
            android:layout_width="321dp"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <RadioButton
                android:id="@+id/likeButton"
                android:layout_width="145dp"
                android:layout_height="wrap_content"
                android:checked="true"
                android:text="Like" />

            <RadioButton
                android:id="@+id/dislikeButton"
                android:layout_width="147dp"
                android:layout_height="wrap_content"
                android:text="Dislike" />
        </RadioGroup>
</LinearLayout>

Second.java クラス:

public class Second extends ViewGroup
{
    private Button mExpandButton;
    private RadioButton mLikeButton;
    private RadioButton mDislikeButton;
    private TextView mText;
    private RadioGroup mLikeGroup;
    private ViewGroup vGroup;

    OnClickListener myClickListener = new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            String s= mExpandButton.getText().toString();

            if (s.equals("One Click"))
                mExpandButton.setText("Other Click");
            else
                mExpandButton.setText("One Click");
        }
    };

    OnCheckedChangeListener myCkeckListener = new OnCheckedChangeListener()
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId)
        {
            if (mLikeButton.isChecked())
                mText.setText("I Like it");

            if (mDislikeButton.isChecked())
                mText.setText("I Don't Like it");
        }
    };

    public Second(Context context) 
    {
        super(context);
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = LayoutInflater.from(context).inflate(R.layout.second, this, true);

        mText = (TextView)this.findViewById(R.id.txtView);
        mExpandButton = (Button) this.findViewById(R.id.expandButton);
        mLikeGroup = (RadioGroup)this.findViewById(R.id.ratingRadioGroup);
        mExpandButton.setOnClickListener(myClickListener);
        mLikeGroup.setOnCheckedChangeListener(myCkeckListener);

        //inflater.inflate(R.layout.second, null);
    }

    @Override
    protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) 
    {
        // TODO Auto-generated method stub      
    }
}

アクティビティが開始される ActivityMain.java クラス:

public class MainActivity extends Activity 
{
    protected LinearLayout mList;
    protected EditText mEditText;   
    protected Button mButton;
    Second[] sec;
    boolean unavez; 

    OnClickListener myClickListener = new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {           
        }
    };

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

        mList = (LinearLayout)findViewById(R.id.List);
        mEditText = (EditText)findViewById(R.id.newEditText);
        mButton = (Button)findViewById(R.id.addButton); 

        sec = new Second[4];
        unavez = true;

        for (int i=0; i<4; i++)     
            sec[i]= new Second(this);       
    }

    @Override 
    protected void onStart() 
    {
        super.onStart();
    }

    @Override protected void onResume() 
    {
        super.onResume();

        if (!unavez)
            return;

        for (int i=0; i<4; i++)
        {
            mList.addView(sec[i]);
            //setContentView(sec[i]);
        }

        unavez = false;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

実行すると、Activity_main.xml に Button と EditText が表示されますが、second.xml にカスタム コントロールが表示されません。onResume() で mList.addView(sec[i]) の代わりに setContentView(sec[i]) の行を使用すると、さらに悪化します: activity_main.xml の EditText と Button が表示されず、空白になります。レイアウト。

カスタム コントロールを activity_main.xml に追加してユーザーに表示するにはどうすればよいですか?

4

1 に答える 1

0

Secondから直接継承することを選択しましたViewGroup。あなたがそれをしたので、実際の実装とそれに付随するすべてのものを備えた、実際のSecondである必要があります。何もしない実装でメソッドをランダムにオーバーライドするだけでなく、何もしない実装が何もしないときに文句を言います。ViewGrouponLayout()ViewGroup

「カスタム コントロール」の作成は、Android では比較的高度なトピックです。Android の初心者は、「カスタム コントロール」が何らかの形で解決すると考えている問題に対する他のソリューションに集中する必要があります。

于 2013-04-25T16:41:21.040 に答える