gpt4 book ai didi

java - 通过单击按钮获取父对象

转载 作者:行者123 更新时间:2023-12-01 05:36:40 25 4
gpt4 key购买 nike

我有一个自定义类,它从 xml 扩展其布局。在该 xml 中我有一个按钮。然后在我的 Activity 中我实例化该自定义类并将其添加到:

  1. 线性布局(自定义类的 View )
  2. 类型化数组(洞对象)

现在我希望如果按下按钮,对象就会从类型化数组和布局中删除。现在我的问题是,首先我有两个地方必须删除对象,其次我找不到在类型化数组中“查找”对象的方法。该按钮仅返回其 View 。使用 .parent.parent 直到到达自定义类 View 的 View 为止,我可以将其从布局中删除,但似乎没有办法从按钮按下时获取对对象本身的引用。

也许我的做法是错误的,不知道。希望你能帮忙。

编辑:澄清一点

M Activity :

public class MActivity extends Activity{
private ArrayList<MCustomObject> objList = new ArrayList<MCustomObject>();
@Override
public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout;

MCustomObject obj1 = new CustomObject(this, "blabla1");
objList.add(obj1);
MCustomObject obj2 = new CustomObject(this, "blabla2");
objList.add(obj2);
MCustomObject obj3 = new CustomObject(this, "blabla3");
objList.add(obj3);
}
}

MCustomObject:

public class MCustomObject{

public MCustomObject(Context context, String xyz){
LayoutInflater layoutInflater = LayoutInflater.from(context);
view = layoutInflater.inflate(R.layout.m_custom_object_layout, null);

button = (Button) view.findViewById(R.id.mButton);

[...]

m_custom_object_layout:

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


<Button
android:id="@+id/mButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/delete" />
</LinearLayout>

现在,当我按下 mButton 时,我希望按钮所属的孔 obj 实例从 objList 中删除。

最佳答案

这是我在您在问题中添加更多详细信息后写的第二个答案。第一个仍然有效,但并不真正适用于您的情况。我的建议是将按钮的代码放在原始 Activity 中,使用您已经作为回调传递的代码。像这样的东西:

public class MCustomObject{
private final String customId;

public MCustomObject(final MActivity parent, final String customId, String xyz){
this.customId = customId;
LayoutInflater layoutInflater = LayoutInflater.from(parent);
view = layoutInflater.inflate(R.layout.m_custom_object_layout, null);
button = (Button) view.findViewById(R.id.mButton);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// do your other stuff
parent.removeCustomObject(customId);
}
});
}

public String getId() {
return customId;
}

我将上下文参数类型更改为 MActivity(并将其设为 final,因为它在匿名类中使用)。如果您需要能够从多个 Activity (不仅仅是 MActivity)构建您的 MCustomObject,那么我建议您将 removeCustomObject 方法提取到接口(interface)中,然后你让所有的 Activity 都实现它。

在您的 MActivity 中,添加以下方法:

public void removeCustomObject(String customId) {
objList.remove(findCustomObjectWithId(id));
}

private MCustomObject findCustomObjectWithId(int id) {
for(MCustomObject custom : objList) {
if (custom.getId() == id) {
return custom;
}
}
return null;
}

(注意:将列表 objList 替换为

Map<String, MCustomObject>

将 customId 映射到对象将使查找更易于阅读)

关于java - 通过单击按钮获取父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091501/

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