Code Bye

Android复合控件的创建

直接贴上代码吧:
activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <include
        android:id="@+id/clearableEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/clearable_edit_text" />

</LinearLayout>

clearable_edit_text.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="vertical" >

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/clearButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/clear" />

</LinearLayout>

ClearableEditText.java

package com.hyc.compoundviews;

import com.hyc.compoundviewdemo.R;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class ClearableEditText extends LinearLayout {
	// Context context = null;
	EditText editText = null;
	Button clearBut = null;

	public ClearableEditText(Context context) {
		// this.context = context;
		super(context);
		// TODO Auto-generated constructor stub

		LayoutInflater layoutInflater = (LayoutInflater) getContext()
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		layoutInflater.inflate(R.layout.clearable_edit_text, this, true);

		editText = (EditText) findViewById(R.id.editText);
		clearBut = (Button) findViewById(R.id.clearButton);

		hookupButton();
	}

	public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}

	public ClearableEditText(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	private void hookupButton() {
		clearBut.setOnClickListener(new ClearButOnClickListenerImpl());
	}

	private class ClearButOnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View arg0) {
			editText.setText("");
		}

	}

}

再加上一个:

<string name="clear">Clear</string>


跑起来后,点击按钮不能清除EditText中的文本信息。

没有填完下面的表单项就按回车提交了这帖子
35分
改成这样试试
 public ClearableEditText(Context context) {
        // this.context = context;
        super(context);
        // TODO Auto-generated constructor stub
           init();
       
    }
 
    public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
            init();
    }
 
    public ClearableEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
            init();
    }
 
    private void hookupButton() {
        clearBut.setOnClickListener(new ClearButOnClickListenerImpl());
    }
 
    private class ClearButOnClickListenerImpl implements OnClickListener {
 
        @Override
        public void onClick(View arg0) {
            editText.setText("");
        }
    
    }
   private void init(){
         LayoutInflater layoutInflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layoutInflater.inflate(R.layout.clearable_edit_text, this, true);
 
        editText = (EditText) findViewById(R.id.editText);
        clearBut = (Button) findViewById(R.id.clearButton);
 
        hookupButton();
   
}

5分
debug看看有没执行到editText.setText(“”);
引用 3 楼 heaimnmn 的回复:

debug看看有没执行到editText.setText(“”);

果然没有跳进去

引用 2 楼 li352558693 的回复:

改成这样试试

 public ClearableEditText(Context context) {
        // this.context = context;
        super(context);
        // TODO Auto-generated constructor stub
           init();
       
    }
 
    public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
            init();
    }
 
    public ClearableEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
            init();
    }
 
    private void hookupButton() {
        clearBut.setOnClickListener(new ClearButOnClickListenerImpl());
    }
 
    private class ClearButOnClickListenerImpl implements OnClickListener {
 
        @Override
        public void onClick(View arg0) {
            editText.setText("");
        }
    
    }
   private void init(){
         LayoutInflater layoutInflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layoutInflater.inflate(R.layout.clearable_edit_text, this, true);
 
        editText = (EditText) findViewById(R.id.editText);
        clearBut = (Button) findViewById(R.id.clearButton);
 
        hookupButton();
   
}

OK了。Thank U!


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Android复合控件的创建