基本上,我在ExpandableListView中具有每个标题的Textview列表。
我想将数据库的id放在TextView的属性中,以便以后检索。我创建了一个CustomView“ ChampText”,其ID为CustomAttribute idveh。
public class ChampText extends android.support.v7.widget.AppCompatTextView{
public String idveh;
public ChampText(Context context){
super(context);
}
public ChampText(Context context, AttributeSet attribute) {
super(context, attribute);
TypedArray ta = context.obtainStyledAttributes(attribute, R.styleable.ChampText);
idveh = ta.getString(R.styleable.ChampText_idveh);
ta.recycle();
}
public String getIdveh() {
return idveh;
}
public void setIdveh(String idveh) {
this.idveh = idveh;
}
}
和attrs.xml:
<resources>
<declare-styleable name="ChampText">
<attr name="idveh" format="string"/>
</declare-styleable>
</resources>
我在getData()方法中创建“ ChampText”列表:
public HashMap<String, List<ChampText>> getData(List<VehiculeModel> list) {
List<String> expVehicule = new ArrayList<String>();
HashMap<String, List<ChampText>> expandableListDetail = new HashMap<String, List<ChampText>>();
for (VehiculeModel vehicule : list) {
List<ChampText> expTextViewVehicule = new ArrayList<ChampText>();
ChampText mesPleins = new ChampText(context);
ChampText supprimer = new ChampText(context);
String nomVehicule = "";
String vehid = String.valueOf(vehicule.getId());
nomVehicule = vehicule.getVehiculeNom() + "\n" + vehicule.getVehiculeType();
mesPleins.setText("Mes Pleins");
mesPleins.setId(vehicule.getId());
mesPleins.setIdveh(vehid);
expTextViewVehicule.add(mesPleins);
supprimer.setText("Supprimer");
supprimer.setId(vehicule.getId());
supprimer.setIdveh(vehid);
expTextViewVehicule.add(supprimer);
expandableListDetail.put(nomVehicule, expTextViewVehicule);
}
return expandableListDetail;
}
此刻,我的ID是好ID(第一个车辆为1,第二个车辆为2,依此类推),我尝试将其分配给为每个车辆创建的每个项目的属性idveh。
在我的主页上,我的Views ChampText创建得很好,我将它们设置如下:
<com.bonobocorp.joker.litrocent.ChampText
android:id="@+id/expandedListItem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:onClick="onClickTextView"
android:clickable="true"/>
Text的值是很清楚的,我可以将id放在Text上,它工作正常,但是如果我将id放在CustomView的属性idveh上,则当我在MainPage上恢复视图并尝试打印时我的方法“ onClickTextView”上的ID值如下:
public void onClickTextView (View expandedListItem) {
ChampText listItem = (ChampText) expandedListItem;
String idveh = ((ChampText) expandedListItem).getIdveh();
System.out.println(idveh);
}
idveh的值始终为“ null”。
如何在ChampText(或TextView)列表的所有项目上检索我的ID,以基于该ID触发操作?
答案 0 :(得分:0)
尝试使用
context.getTheme().obtainStyledAttributes(attribute, R.styleable.ChampText);
唯一的区别是您将从上下文中使用getTheme方法
答案 1 :(得分:0)
我解决了我的问题。
我有一个班级正在生成我的视图(尤其是我的孩子视图)。
然后我在:
@Override
public View getChildView(int listPosition, final int expandedListPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final ChampText expandedListText = (ChampText) getChild(listPosition, expandedListPosition);
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.list_item, null);
}
ChampText expandedListTextView = (ChampText) convertView
.findViewById(R.id.expandedListItem);
expandedListTextView.setText(expandedListText.getText());
expandedListTextView.setIdveh(expandedListText.getIdveh());
return convertView;
}
我在行末添加了expandedListTextView.setIdveh(expandedListText.getIdveh());
行。
显然,它可以工作。
非常感谢你们花点时间!