在公共类中以编程方式创建新的TextView

时间:2014-04-11 09:49:10

标签: java android xml eclipse android-widget

我是Android的新手,如果我的问题太蠢了就道歉!

我在公共类中创建了一个新的TextView,但是当我想为它分配ID时,[我尝试了text1.setID(1)],但Eclipse无法识别text1。

有什么问题?我是否定义了TextView错误?

其实我的目标是创建一个包含2个textViews(text1& text2)的类(这里是Class Post),然后我想在我的程序中创建这个类的对象(例如在main活动中),这是一个正确的方法吗? (一种简单的创建新的Android小部件)

public class Post{

Context Creator_Context;
public Post(Context context)
 {
    ctx= context;
 }

//Creating a textview.

TextView text1 = new TextView(Ctx);
TextView text2 = new TextView(Ctx);


///////here is the PROBLEM////// :

text1.setID(1);

}

谢谢,

2 个答案:

答案 0 :(得分:0)

您可以尝试为已创建的textView设置标记。 (标签可以是字母数字字符串)

textView.setTag("TAG-1");

答案 1 :(得分:0)

这不是您创建简单小部件所需的方式。

除此之外,更简单的方法是扩展现有组件并将textview放入其中。例如,您可以扩展FrameLayout:

public class TwoLinesTextButton extends FrameLayout {

private TextView textView1;
private TextView textView2;

public TwoLinesTextButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    initView(context, attrs);
}

public TwoLinesTextButton(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    initView(context, attrs);
}


public void fill(String text1, String text2) {
    textView1.setText(text1);
    textView2.setText(text2);
}

private void initView(Context context, AttributeSet attrs) {

    LayoutInflater infl = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = infl.inflate(getLayoutResource(), null);


    textView1 = (TextView) view.findViewById(R.id.text_1);
    textView2 = (TextView) view.findViewById(R.id.text_2);

    this.addView(view);
}


protected int getLayoutResource() {
    return R.layout.twolinestextbutton;
}

}

并在layout / twolinestextbutton.xml中:

<?xml version="1.0" encoding="utf-8"?>

<TextView
        android:id="@+id/text_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxWidth="250dp"/>

<TextView
        android:id="@+id/text_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxWidth="250dp"/>