#java #android #json
#java #Android #json
Вопрос:
Я использую LayoutInflater для добавления динамических представлений каждый раз, когда я нажимаю функцию button. Я пытаюсь добавить тег / идентификатор в представление, чтобы я мог идентифицировать каждый элемент.
Я пробовал setTag, а также setId, но, похоже, в конечном итоге всегда не удается найти элемент
public void onAddField(View v) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView = inflater.inflate(R.layout.field, null);
rowView.setTag(a);
//rowView.setId(a);
getdata2();
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() - 1);
Log.d(String.valueOf(parentLinearLayout.getChildAt(a).getId()), "onAddField: " type2_workout_mySpinner.findViewWithTag(a).);
getdata2();
a = a 1;
}
private void getdata2() {
StringRequest stringRequest = new StringRequest("http://.../getDataCategories.php",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JSONObject j = null;
try {
j = new JSONObject(response);
result = j.getJSONArray(JSON_ARRAY);
catdetails(result);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void catdetails(JSONArray j) {
for (int i = 0; i < j.length(); i ) {
try {
JSONObject json = j.getJSONObject(i);
arrayList2.add(json.getString(CategoryType_idArray));
} catch (JSONException e) {
e.printStackTrace();
}
}
type2_workout_mySpinner.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, arrayList2));
}
Я хотел бы иметь возможность использовать класс getter для получения значений каждого элемента, который я добавил, например, значение нескольких выбранных значений spinner
Комментарии:
1. Семантически ИДЕНТИФИКАТОР — это в значительной степени то, что он говорит; способ идентифицировать данное
View
. Теги больше похожи на метаданные, дополнительную информацию, которую вы хотите прикрепить кView
. Тем не менее, в любом случае вам нужно вызвать соответствующийfindView*()
метод для некоторого предка желаемогоView
. Единственным экземпляром любого из этих методов, который я вижу в вашем коде, являетсяfindViewWithTag(a)
, который, кажется, вызывается наSpinner
, но ваши динамически созданныеView
s не будут в этом. Вы пробовали вызывать любой из них наparentLinearLayout
?2. @MikeM. спасибо за ваш ответ. Что-то вроде parentLinearLayout.getChildAt(a).findViewWithTag(a)? Если да, то как бы мне связать это со счетчиками? Должно ли это происходить в другом методе или это будет в методе onAddField?
3. Вам не нужен
getChildAt(a)
(хотя, если порядок и количество строк постоянны, вы могли бы просто использовать это вместо любого изfindView*()
методов). Я действительно не понимаю, какSpinner
вписывается во все это.4. @MikeM. Добавляемое мной представление содержит счетчик, поэтому в основном то, что я пытаюсь делать, это каждый раз, когда я добавляю новое представление в свой список, я хочу выбрать значение из счетчика из этого представления, и на экране в конечном итоге появится список просмотров с несколькими счетчиками.
5. спасибо @MikeM. это сработало!