使用按钮

时间:2015-07-15 17:44:36

标签: android textview relativelayout onclicklistener

我想在按下按钮后动态创建相对布局。 我用构造函数编写了这样的示例类,它创建了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对象的内容(如上所述)。我有另一个提供数据的线程,我想在这些文本视图中在线显示这些数据。按下按钮将被删除,因此再次按下按钮刷新文本视图的选项是不可接受的。

甚至可能吗?

2 个答案:

答案 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;
    }
}
  1. 在您的activity / fragment类中,您有connectButton.setOnClickListener,您正在添加类的TextView成员,例如:

    私有TextView mMyTextView;

  2. 然后onClickListner应该如下所示:

    connectButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myTextView = CreateTextView.createTextView(getApplicationContext(), charSequence, 30, -2, -2, 14);
            relativeLayout.addView(myTextView);
        }});
    
  3. 然后根据架构,您的偏好......(通过contentResolver,LocalBroadcastManager,....),可以通过多种方式更改新创建的TextView。这是你通过使用myTextView

  4. 来做的

答案 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内容?