Modifier les attributs d'une custom view dynamiquement
Bonjour à tous,
Dans mon projet, j'ai créé une custom view pour représenter un élément que je peux appliquer un peu partout. Voici son code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| public class Plan extends LinearLayout {
@SuppressWarnings("WeakerAccess")
String price = "";
@SuppressWarnings("WeakerAccess")
String period = "";
@SuppressWarnings("WeakerAccess")
String title = "";
@SuppressWarnings("WeakerAccess")
String titleInfo = "";
public Plan(Context context) {
super(context);
LayoutInflater.from(context).inflate(R.layout.plan, this);
}
@SuppressLint("NewApi")
public Plan(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
R.styleable.Plan, 0, 0);
try {
// get the text and drawables specified using the names in attrs.xml
price = a.getString(R.styleable.Plan_price);
period = a.getString(R.styleable.Plan_period);
title = a.getString(R.styleable.Plan_plan_title);
titleInfo = a.getString(R.styleable.Plan_title_info);
} finally {
a.recycle();
}
LayoutInflater.from(context).inflate(R.layout.plan, this);
TextView priceView = (TextView) this.findViewById(R.id.price);
priceView.setText(price);
TextView periodView = (TextView) this.findViewById(R.id.period);
periodView.setText(period);
TextView titleView = (TextView) this.findViewById(R.id.title);
titleView.setText(title);
TextView infoView = (TextView) this.findViewById(R.id.title_info);
infoView.setText(titleInfo);
this.setClickable(true);
this.setFocusable(true);
this.setFocusableInTouchMode(false);
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getPeriod() {
return period;
}
public void setPeriod(String period) {
this.period = period;
}
public void setTitle(String title) {
this.title = title;
}
public void setTitleInfo(String titleInfo) {
this.titleInfo = titleInfo;
}
} |
et un example de layout dans lequel je le mets
Code:
1 2 3 4 5 6 7 8 9 10
| <com.....Plan
android:id="@+id/plan_hour"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="selectPrice"
custom:period="@string/plan_period_hour"
custom:plan_title="@string/plan_title_hour"
custom:price="7 "
custom:title_info="@string/plan_titleinfo_hour" /> |
Pour le projet, j'aurais besoin de modifier et/ou créer cette custom view dynamiquement. Mais je n'y arrive pas. Dans mon activité, j'ai beau mettre
Code:
1 2 3 4 5 6
| Plan planHour = new Plan(this);
planHour.setPrice(rental.getPriceHour());
planHour.setPeriod(getString(R.string.plan_period_hour));
planHour.setTitle(getString(R.string.plan_title_hour));
planHour.setTitle(getString(R.string.plan_titleinfo_hour));
layout.addView(planHour); |
ou via du xml
Code:
1 2 3 4 5 6 7
| Plan planHour = (Plan) findViewById(R.id.plan_hour);
planHour.setVisibility(View.VISIBLE);
planHour.setPrice(rental.getPriceHour());
planHour.setPeriod(getString(R.string.plan_period_hour));
planHour.setTitle(getString(R.string.plan_title_hour));
planHour.setTitle(getString(R.string.plan_titleinfo_hour));
planHour.invalidate(); |
rien n'y fait. La custom view est bien dessiné (je vois le background), mais les données ne sont pas remplies.
Comment faire ?
Merci