gpt4 book ai didi

android - 我如何着手设置涉及标签的用户界面?

转载 作者:行者123 更新时间:2023-11-30 03:23:20 25 4
gpt4 key购买 nike

我的目标是: Image

我不确定我这样做是否正确。可能有更好、更高效、更清洁的方法来做到这一点,但我需要知道如何做。

这个布局是用 xml 设计的,并通过充气器充气。然后将生成的 View 放入 AlertDialog 中。因此,这被用户视为一个 AlertDialog。

我关心的是底部的标签部分。我希望它像 Tumblr 标签一样工作。输入一个字符串,点击按钮,带有该标签名称的按钮将显示在其下方的空白部分。

现在,如果您单击这些按钮(带有它们各自的标签名称),它们将从框架中消失。

我有几个问题。

  1. 我在实现监听器时遇到了问题。如果 AddTag 按钮在(当前不可见但存在的)LinearLayout 中创建更多按钮,那么创建的按钮如何处理?如果这些按钮是在从 AddTag 按钮的 onClick 方法定义的某个内部方法中创建的,那么这些按钮如何实现将自己从 LinearLayout 中移除的 onClick 监听器?

  2. 我担心必须将其中一些 View 声明为 FINAL 才能在按钮方法和内部类中引用它们。我现在因此而陷入困境。

  3. 我是否必须为标签按钮定义自己的布局?你看,一个 LinearLayout 一个接一个地显示东西,是吗?我想尝试重现一些社交网站的做法。从上到下,从左到右用按钮填充布局。如果当前行中没有剩余空间,请转到下一行并在那里添加标签按钮。它基本上是一个具有自动换行功能的动态 LinearLayout。

如果有任何更好的方法来实现这一点,请让我知道该怎么做的一般步骤。我还没有学过 Fragments,但我认为它在这里可能非常适用。另外,我是否应该创建一个扩展 ViewGroup 的类,在那里扩展 XML,并添加辅助方法来处理事情?我想我可以从 DialogFragment 中添加 View (我刚刚创建的类)并从那里开始工作?

顺便说一句,这是我当前的代码。我被困住了。

/**
* Opens a view for the user to define their new action and add it to the
* dictionary.
*
* @param view
*/
public void defineNewAction(View view) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
View viewToSet = inflater.inflate(
R.layout.define_new_action_window_layout,
null);

final EditText newActionName = (EditText) viewToSet
.findViewById(R.id.set_action_name);

final RadioGroup priorityGroup = (RadioGroup) viewToSet
.findViewById(R.id.radiogroup_set_priority);

final EditText goalTimeHours = (EditText) viewToSet
.findViewById(R.id.set_goal_time_hours);

final EditText goalTimeMinutes = (EditText) viewToSet
.findViewById(R.id.set_goal_time_minutes);

final EditText addTagsInput = (EditText) viewToSet
.findViewById(R.id.add_tags_input);
Button addTagButton = (Button) viewToSet.findViewById(R.id.btn_add_tags);
final ArrayList<String> tags = new ArrayList<String>();

final LinearLayout currentTagsLayout = (LinearLayout) viewToSet
.findViewById(R.id.current_tags);
addTagButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
String tag = addTagsInput.getText().toString();
tags.add(tag);
Button newTag = new Button(builder.getContext());
int tagId = tag.hashCode();
if (tagId < 0)
tagId *= -1;
newTag.setId(tagId);

newTag.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
Button toRemove = (Button) currentTagsLayout.findViewById(tagId);
currentTagsLayout.removeView(toRemove);
}
});

currentTagsLayout.addView(newTag);
}
});

builder.setTitle("Define your action.");
builder.setView(viewToSet);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface arg0, int arg1) {
String name = newActionName.getText().toString();
int priority = priorityGroup.getCheckedRadioButtonId();
int goalHours = Integer
.parseInt(goalTimeHours.getText().toString());
int goalMinutes = Integer.parseInt(goalTimeMinutes.getText()
.toString());
}

});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {

public void onClick(DialogInterface arg0, int arg1) {

}
});
AlertDialog dialog = builder.create();
dialog.show();
}

最佳答案

I have trouble implementing listeners

没有问题。对于您要实现的功能,您可以继续添加按钮并在它们上设置 OnClickListeners。您甚至不需要给他们一个 ID,或以任何方式跟踪他们。 OnClickListener 中的以下代码将执行以下操作:

newTag.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

// Use the View given to you
currentTagsLayout.removeView(v);

}
});

I am afraid about having to declare some of these views as FINAL

这就是 Java 的工作原理。我没有注意到这有任何严重的影响。您还可以将变量声明为全局变量,而不必将它们定义为最终变量。但我不明白为什么将它们声明为 final 是一个问题。您能否举例说明这是一个问题?

Do I have to define my own layout for the tag buttons?

这是您必须自己处理的事情。这是一个设计决定。如果需要自动换行支持,可以查看Android Flow Layout:Link .它是一个扩展的 LinearLayout,支持自动换行其内容。

I have not learned Fragments yet, but I think it may be VERY applicable here

我不明白他们为什么会这样。

注意/旁白:在这里进行某种检查会更好:

String tag = "";

if (!addTagsInput.getText().toString().equals("")) {
tag = addTagsInput.getText().toString();
} else {
// handle empty string
}

关于android - 我如何着手设置涉及标签的用户界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18725343/

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