Получить идентификатор из экземпляра CustomView в другом классе - PullRequest
0 голосов
/ 08 октября 2018

По сути, у меня есть список Textview для каждого заголовка в ExpandableListView.

Я хотел бы добавить идентификатор из базы данных в атрибут TextView для получения его позже.Я создал CustomView "ChampText" с идентификатором CustomAttribute, который является идентификатором.

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>

Я создаю свой список "ChampText" вМетод getData ():

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;
}

На данный момент мой идентификатор является хорошим идентификатором (1 для первой машины, 2 для второй и т. д.), и я пытаюсь присвоить его атрибуту idveh для каждого элемента Iсоздать для каждого транспортного средства.

На моей главной странице мои 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 хорошо информировано, и я могу поставитьидентификатор в тексте, он работает хорошо, но если я добавлю идентификатор в свой атрибут idveh моего CustomView, когда я восстановлю свое представление на главной странице и попытаюсь напечатать значение моего идентификатора в моем методе «onClickTextView» следующим образом:

public void onClickTextView (View expandedListItem) {

    ChampText listItem = (ChampText) expandedListItem;
    String idveh = ((ChampText) expandedListItem).getIdveh();
    System.out.println(idveh);
}

Значение idveh всегда равно "null".

Как я могу получить свой идентификатор для всех элементов моего списка ChampText (или TextView), чтобы вызвать действие на основе идентификатора

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Я решаю свою проблему.

У меня есть класс, который генерирует мое представление (особенно мое дочернее представление).

, и я получил этот метод в:

@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()); в конце.

и, очевидно, это работает ..

Ну, спасибо, ребята, что все равно нашли время !!!

0 голосов
/ 08 октября 2018

попробуйте использовать

context.getTheme().obtainStyledAttributes(attribute, R.styleable.ChampText);

с той лишь разницей, что вы будете использовать метод getTheme из контекста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...