从CustomView实例化的另一个类中检索ID

时间:2018-10-07 22:33:09

标签: java android textview

基本上,我在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触发操作?

2 个答案:

答案 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());行。

显然,它可以工作。

非常感谢你们花点时间!