我想在按下按钮后动态创建相对布局。 我用构造函数编写了这样的示例类,它创建了TextView:
public static class CreateTextView {
public static TextView textView;
public Context context;
public CharSequence text;
public int textSize;
public int textViewWidth;
public int textViewHeight;
public int layoutRule;
public CreateTextView(Context context, CharSequence text, int textSize, int textViewWidth, int textViewHeight, int layoutRule) {
textView = new TextView(context);
RelativeLayout.LayoutParams textViewParams = new RelativeLayout.LayoutParams(
textViewWidth, textViewHeight
);
textViewParams.addRule(layoutRule);
textView.setLayoutParams(textViewParams);
textView.setText(text);
textView.setTextSize(textSize);
}
public View getView() {
return textView;
}
}
然后在onClickListener中我执行它:
connectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createTextView = new CreateTextView(getApplicationContext(), charSequence, 30, -2, -2, 14);
relativeLayout.addView(CreateTextView.textView);
}
});
我的第一个问题是我必须创建textView静态字段,因为"非静态字段不能从静态上下文"中引用。但是现在我可以忍受这种情况,尽管如果你有另一个想法,我会很感激;)
主要问题是我想动态更改textView对象的内容(如上所述)。我有另一个提供数据的线程,我想在这些文本视图中在线显示这些数据。按下按钮将被删除,因此再次按下按钮刷新文本视图的选项是不可接受的。
甚至可能吗?
答案 0 :(得分:0)
Adam,你的代码看起来很糟糕,但是从事情开始,你可以做/改进: 1.如果要创建用于创建TextView的静态方法 - 确定,请在非静态类中执行此操作,但在普通公共类中使用静态方法createTextView执行此操作,即返回TextView。我相信,它应该看起来像这样(我没有编译它,所以你可能需要做一些小改动才能使它可编辑):
public class CreateTextView {
public static TextView createTextView(Context context, CharSequence text, int textSize, int textViewWidth, int textViewHeight, int layoutRule) {
TextView textView = new TextView(context);
RelativeLayout.LayoutParams textViewParams = new RelativeLayout.LayoutParams(
textViewWidth, textViewHeight
);
textViewParams.addRule(layoutRule);
textView.setLayoutParams(textViewParams);
textView.setText(text);
textView.setTextSize(textSize);
return textView;
}
}
在您的activity / fragment类中,您有connectButton.setOnClickListener,您正在添加类的TextView成员,例如:
私有TextView mMyTextView;
然后onClickListner应该如下所示:
connectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myTextView = CreateTextView.createTextView(getApplicationContext(), charSequence, 30, -2, -2, 14);
relativeLayout.addView(myTextView);
}});
然后根据架构,您的偏好......(通过contentResolver,LocalBroadcastManager,....),可以通过多种方式更改新创建的TextView。这是你通过使用myTextView
答案 1 :(得分:0)
在你回答之前,我是这样做的:
public class CreateTextView {
public TextView textView;
public Context context;
public CharSequence text;
public int textSize;
public int textViewWidth;
public int textViewHeight;
public int layoutRule;
public CreateTextView(RelativeLayout relativeLayout, Context context, CharSequence text, int textSize, int textViewWidth, int textViewHeight, int layoutRule) {
textView = new TextView(context);
RelativeLayout.LayoutParams textViewParams = new RelativeLayout.LayoutParams(
textViewWidth, textViewHeight
);
textViewParams.addRule(layoutRule);
textView.setLayoutParams(textViewParams);
textView.setText(text);
textView.setTextSize(textSize);
relativeLayout.addView(textView);
}
public void setContent(CharSequence charSequence) {
textView.setText(charSequence);
}
}
如您所见,我将RelativeLayout对象添加到构造函数参数中,并删除所有静态类型。它工作正常,现在我可以使用setContent()方法更改文本。但现在我有下一个问题:是否有任何选项可以在不使用setText()方法的情况下更改TextView内容?