我创建了一个复合 View ,它由三个 View 组成,两个 ImageButtons
和一个 EditText。每次单击按钮时,我都试图创建新的“MyView
” View 。首先,我决定在 xml 中设置 onClick,希望每次创建新的 MyView 时,它都已经设置了监听器,但它似乎不起作用。所以我的问题是,如何为复合 View 中的按钮设置 onClick 监听器,方法在其他类中?我说的方法是 ViewControl
vlass
中的 addViewBelow()
MyView.xml
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<>
android:layout_width="0sp"
android:layout_height="wrap_content"
android:id="@+id/text"
android:layout_weight="80" />
<>
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="10"
android:id="@+id/add"
android:onClick="addViewBelow"
android:clickable="true"
android:background="@drawable/add" />
<>
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="10"
android:id="@+id/rmv"
android:background="@drawable/rmv" />
我的 View .java
public class MyView extends LinearLayout {
private EditText txt;
private ImageView add, rmv;
public MyView(Context context)
{
super(context);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.myview, this);
txt = (EditText) findViewById(R.id.text);
add = (ImageView) findViewById(R.id.add);
rmv = (ImageView) findViewById(R.id.rmv);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.myview, this);
txt = (EditText) findViewById(R.id.text);
add = (ImageView) findViewById(R.id.add);
rmv = (ImageView) findViewById(R.id.rmv);
}
ViewControl.java
public class ViewControl implements OnClickListener {
LinkedList pathView;
Button mainButton;
RelativeLayout rl;
Activity act;
int lastId;
public ViewControl(Activity activity) {
act = activity;
//stuff
}
@Override
public void onClick(View v) {
//stuff
}
public void addViewBelow() {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, lastId);
MyView mv = new MyView(act);
mv.setId(UniqueID.generateViewId());
mv.setLayoutParams(params);
lastId = mv.getId();
pathView.add(mv);
rl.addView(pathView.getLast());
}
}
要使 android:onClick
起作用,该方法必须位于 View 的上下文中,通常是 Activity。
对于您的情况,我建议如下:
将此方法添加到 MyView:
public void setClickListener(OnClickListener listener){
add.setOnClickListener(listener);
}
hiện hữu addViewBelow
中,执行此操作:
mv.setClickListener(new OnClickListener(){
@Override
public void onClick(View v){
addViewBelow();
}
});
Tôi là một lập trình viên xuất sắc, rất giỏi!