Android: Редактирование видов добавлено программно - PullRequest
0 голосов
/ 06 февраля 2020

Итак, у меня есть приложение для обмена сообщениями, где я читаю свою базу данных и визуализирую все сообщения программно. Дело в том, что когда я нахожусь внутри другого макета, мне нужно раздувать эти сообщения и редактировать их по своему желанию. Например,

val myView = inflater.inflate(R.layout.female_messaging_fragment, container, false)
...

val convLayout = myView.findViewById<LinearLayout>(R.id.conversations_layout)
val profileLayout = LinearLayout(context)

 val recentMessage = TextView(context)
 recentMessage.id = 5



val recentParams = LinearLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT)

            recentParams.setMargins(10, 0, 0, 0)

            recentMessage.layoutParams = recentParams
            recentMessage.textSize = 16f
            if (didIsendLastMessage) {
                val arrowIcon = ImageView(context)
                Picasso.get().load(R.drawable.right_arrow).resize(50, 50).into(arrowIcon)
                val imageParams = LinearLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT)
                imageParams.gravity = Gravity.CENTER
                arrowIcon.layoutParams = imageParams
                recentMessage.setText(mostRecentMessage)
                arrowAndMessageLayout.addView(arrowIcon)
                arrowAndMessageLayout.addView(recentMessage)
            } else {
                recentMessage.setText(mostRecentMessage)
                arrowAndMessageLayout.addView(recentMessage)
            }


            nameLastmessageLayout.addView(arrowAndMessageLayout)


            // Add namne and message to profile
            profileLayout.addView(nameLastmessageLayout)
convLayout.addView(profileLayout)

А затем в другом макете ...

LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.female_messaging_fragment, null);
TextView text = (TextView) v.findViewById(5);
text.setText("Something");

Дело в том, что текст всегда равен нулю, и я считаю, что это потому, что я добавил представления программно , Что еще я могу сделать здесь? Спасибо!

1 Ответ

1 голос
/ 06 февраля 2020

накачивание female_messaging_fragment вернет fre sh новый объект вида Layout вашего xml, который может быть пустым макетом без каких-либо TextView.

Чтобы получить объект TextView, вам нужен объект Layout, в котором вы добавил мнения.

Например, согласно вашему коду, который вы добавили recentMessage в arrowAndMessageLayout, чтобы получить объект recentMessage, вам нужен объект arrowAndMessageLayout, и вы можете получить его, как показано ниже -

TextView text = arrowAndMessageLayout.findViewById(5);

ИЛИ

TextView text = convLayout.findViewById(5);

Повторное надувание вернет новый sh новый контейнер без вашего просмотра текста.

Надеюсь, это поможет вам.

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