Макет раздут, но не виден - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь накачать R.layout внутри LinearLayout с помощью контейнера id.Макет надувается, как я вижу в Android Studio Layout Inspector, но не отображается в эмуляторе во время работы приложения.

enter image description here

Накачка происходит, когда кнопканажата.Кнопка находится внутри карты.Все карты создаются внутри Адаптера.Я публикую метод getView адаптера.

@Override
public View getView(final int position,View convertView, final ViewGroup parent) {
    LayoutInflater inflater = null;
    if (convertView == null) {
        inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.card_draft, parent, false);
    }

    Button show = convertView.findViewById(R.id.button);
    final LinearLayout container = convertView.findViewById(R.id.container);
    final LayoutInflater infl = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            infl.inflate(R.layout.card_text, container,true);
            v.setVisibility(View.GONE);
            TextView text = (TextView) ((SwipeStack) parent).getTopView().findViewById(R.id.text);
            text.setText("dsfsfsf");
        }
    });
    return convertView;
}

, если я переместу эту строку

                infl.inflate(R.layout.card_text, container,true);

за пределы OnClickListener (в теле основной функции), он работает нормально.

Я использую эту библиотеку https://github.com/flschweiger/SwipeStack

и этот адаптер

public class SwipeStackAdapter extends ArrayAdapter<Item>{

private List<Item> mData;
private Context ctx;

public SwipeStackAdapter(Context ctx,List<Item> data) {
    super(ctx, R.layout.card,data);
    this.ctx = ctx;
    this.mData = data;
}

@Override
public int getCount() {
    return mData.size();
}

@Override
public Word getItem(int position) {
    return mData.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position,View convertView, final ViewGroup parent) {
    LayoutInflater inflater = null;
    if (convertView == null) {
        inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.card_draft, parent, false);
    }

    Button show = convertView.findViewById(R.id.button);
    final LinearLayout container = convertView.findViewById(R.id.container);
    final LayoutInflater infl = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            infl.inflate(R.layout.card_text, container,true);
            v.setVisibility(View.GONE);
            TextView text = (TextView) ((SwipeStack) parent).getTopView().findViewById(R.id.text);
            text.setText("dsfsfsf");

        }
    });
    return convertView;
}

} ​​

Почему это произошло?Есть предложения?

1 Ответ

0 голосов
/ 13 ноября 2018

Вам необходимо прикрепить новые виды к существующим.Я не вижу, как вы добавляете свое раздутое представление к другому.Если вы хотите добавить раздутый вид к LinearLayout, вам нужно сделать:

LinearLayout containerLy = findViewById(R.id.container);
View inflatedView = getLayoutInflater().inflate(R.layout.my_layout_to_be_inflated, null);
//manipulate here your inflated view
containerLy.add(inflatedView);
...