这让我有点生气,因为我知道这应该很简单,但我没有得到理想的效果。
我有以下arraylist
private List<String> tagStringArray = new ArrayList<>();
然后我有一个方法可以根据从我的Retrofit实例中提取的ID值创建动态按钮。
在我的方法中,我有一个计数来帮助我设置按钮的标题,但我还将count的值添加到ArrayList以用于另一种方法。
我从上述方法中获取了相关信息。
count = 1;
if (!questionNumber.equals("") && !questionNumber.equals(null)) {
for (final Object value : list) {
try {
/*Dynamically create new Button which includes the question number
*/
final AppCompatButton btn_question = new AppCompatButton(getActivity());
/*LayoutParams (int width, int height,float weight)
As LayoutParams is defaulted in px, I have called a method called dpToPX to make sure
the dynamically added EditText is the same size on all devices.
*/
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dpToPx(280), dpToPx(45), 1);
btn_question.setBackgroundColor(Color.parseColor("#3B5998"));
btn_question.setTextColor(Color.WHITE);
btn_question.setText("Question "+count);
//set the Tag based on its position in the XML
tagStringArray.add(String.valueOf((count)));
count++;
如果用户点击说问题1按钮,我希望我的片段说问题1,所以为了尝试实现这一点,我尝试了以下操作:
String tags = String.valueOf(tagStringArray);
tags = tags.substring(1, tags.length() -1);
String[] currentTag = tags.split(",");
if (currentTag[0].contains("1")) {
tv_setQuestions_edit.setText("Question 1");
}else if(currentTag[1].contains("2")) {
tv_setQuestions_edit.setText("Question 2");
}
但是这总是将标题设置为问题1,我不确定出了什么问题.......
如果我使用以下干杯Toast.makeText(getActivity(), Arrays.toString(currentTag), Toast.LENGTH_LONG).show();
,则会显示 [1,2] ,所以我知道它们已添加好了。
我确实通过这样做来考虑使用标签:
public static int KEY_COUNT=0; public static int KEY_VALUE=1;
btn_question.setTag(KEY_VALUE,value);
btn_question.setTag(KEY_COUNT,count);
但由于某些原因,当我添加多个标签时(因为我需要至少2个),布局中缺少我的动态按钮。但由于某些原因,只有1个标签 - 像这样btn_question.setTag(value)
;使用,它显示正常(我感觉它与我的片段的一些问题)。因此,我试图在此期间考虑解决方法。
非常感谢任何帮助或指导。
答案 0 :(得分:2)
这是因为
currentTag[0].contains("1")
总是true
。 currentTag的第一项始终包含“1”。
为什么不在按钮的onClick方法中执行String titleForFragment = myButton.getText()
,而不是这样做?这样,您可以在所有按钮上设置相同的onClickListener,这将减少您需要编写的代码量。