gpt4 book ai didi

java - 复合 View 中按钮的 OnClick 监听器

转载 作者:行者123 更新时间:2023-11-29 05:29:51 28 4
gpt4 key购买 nike

我创建了一个复合 View ,它由三个 View 组成,两个 ImageButtons 和一个 EditText。每次单击按钮时,我都试图创建新的“MyView” View 。首先,我决定在 xml 中设置 onClick,希望每次创建新的 MyView 时,它都已经设置了监听器,但它似乎不起作用。所以我的问题是,如何为复合 View 中的按钮设置 onClick 监听器,方法在其他类中?我说的方法是 ViewControl vlass

中的 addViewBelow()
MyView.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" >

<EditText
android:layout_width="0sp"
android:layout_height="wrap_content"
android:id="@+id/text"
android:layout_weight="80" />

<ImageButton
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" />

<ImageButton
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" />

</LinearLayout>

我的 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<MyView> 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);
}

addViewBelow 中,执行此操作:

mv.setClickListener(new OnClickListener(){
@Override
public void onClick(View v){
addViewBelow();
}
});

关于java - 复合 View 中按钮的 OnClick 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21511506/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com