Я новичок в Android. У меня есть 2 вида прядильщика, и я хочу выполнить действие, в котором, если какой-либо из элементов представления прядильщика выбран, другой элемент прядильщика выбирается автоматически в зависимости от того, который выбран в одном из двух представлений прядильщика. и все данные для представления счетчика находятся в локальном файле json в папке ресурсов
мой файл Java,
package com.example.vibhanshutyagi.spinnerexample2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
String json = null;
public String loadJSONFromAsset() {
try {
InputStream is = getAssets().open("CustomerList.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
Spinner spinner = findViewById(R.id.spinner_01);
List<String> items = new ArrayList<>();
Spinner spinner1 = findViewById(R.id.spinner_02);
List<String> item = new ArrayList<>();
JSONObject obj = new JSONObject(loadJSONFromAsset());
JSONArray array = obj.getJSONArray("Sheet1");
JSONObject obj1 = new JSONObject(loadJSONFromAsset());
JSONArray array1 = obj1.getJSONArray("Sheet2");
/*this.setTitle(root.getString("title"));*/
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
items.add(object.getString("FIELD1"));
// item.add(object.getString("FIELD2"));
// items.add(object.getString("FIELD3"));
}
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
// items.add(object.getString("FIELD1"));
item.add(object.getString("FIELD2"));
}
ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
spinner.setAdapter(adapter);
ArrayAdapter adapter1 = new ArrayAdapter(this,android.R.layout.simple_list_item_1, item);
spinner1.setAdapter(adapter1);
} catch (JSONException e) {
e.printStackTrace();
}
}
}`
мой файл json,
{ "Sheet1": [ {
"FIELD1": "BEDROOM 1",
"FIELD2": "1"
}, {
"FIELD1": "BEDROOM 2",
"FIELD2": "2"
}, {
"FIELD1": "BEDROOM 3",
"FIELD2": "3"
}, {
"FIELD1": "LIVING ROOM",
"FIELD2": "4"
}, {
"FIELD1": "DINING ROOM",
"FIELD2": "5"
}, {
"FIELD1": "KITCHEN",
"FIELD2": "6"
}, {
"FIELD1": "TOILET 1",
"FIELD2": "7"
} ], "Sheet2": [
{
"FIELD1": "BEDROOM 1",
"FIELD2": "1"
},
{
"FIELD1": "BEDROOM 2",
"FIELD2": "2"
},
{
"FIELD1": "BEDROOM 3",
"FIELD2": "3"
},
{
"FIELD1": "LIVING ROOM",
"FIELD2": "4"
},
{
"FIELD1": "DINING ROOM",
"FIELD2": "5"
},
{
"FIELD1": "KITCHEN",
"FIELD2": "6"
},
{
"FIELD1": "TOILET 1",
"FIELD2": "7"
} ] }
мой xml-файл spinner_layout,
<TextView
android:id = "@+id/text11"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
мой основной файл xml,
<Spinner
android:id = "@+id/spinner_01"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginEnd = "16dp"
android:layout_marginTop = "16dp"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintTop_toTopOf = "parent"
android:layout_marginRight = "16dp"> </Spinner> <Spinner
android:id = "@+id/spinner_02"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginStart = "16dp"
android:layout_marginTop = "83dp"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent"
android:layout_marginLeft = "16dp"> </Spinner>
если вы хотите выбрать второй счетчик автоматически, вам не нужно создавать второй счетчик, потому что, если вы выберете Filed one, вы знаете значение для первого поля, поэтому возьмите TextView
установленный текст в нем в соответствии с вашим выбором.
Я видел ваш код, почему вы берете два прядильщика, создаете Custom Bean и Custom Adapter и заполняете объект bean.
Не уверен, что вы хотите это сделать:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
String json = null;
Spinner spinner;
Spinner spinner1;
public String loadJSONFromAsset() {
try {
InputStream is = getAssets().open("CustomerList.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
spinner = findViewById(R.id.spinner_01);
List<String> items = new ArrayList<>();
spinner.setOnItemClickListener(this);
spinner1 = findViewById(R.id.spinner_02);
List<String> item = new ArrayList<>();
JSONObject obj = new JSONObject(loadJSONFromAsset());
JSONArray array = obj.getJSONArray("Sheet1");
JSONObject obj1 = new JSONObject(loadJSONFromAsset());
JSONArray array1 = obj1.getJSONArray("Sheet2");
/*this.setTitle(root.getString("title"));*/
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
items.add(object.getString("FIELD1"));
// item.add(object.getString("FIELD2"));
// items.add(object.getString("FIELD3"));
}
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
// items.add(object.getString("FIELD1"));
item.add(object.getString("FIELD2"));
}
ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
spinner.setAdapter(adapter);
ArrayAdapter adapter1 = new ArrayAdapter(this,android.R.layout.simple_list_item_1, item);
spinner1.setAdapter(adapter1);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
spinner1.setSelection(position);
}
}
этот ответ бесполезен и не решает мою цель, но спасибо за помощь Сабе
Не могли бы вы пояснить, что вы подразумеваете под автозаполнением? Из этого предложения if any one of the spinner view item is selected the other spinner item gets selected automatically
я понял, что вы хотите выбрать другой на основе положения текущего.
Когда мы выбираем элемент в счетчике 1, затем в счетчике 2 некоторый элемент, связанный с этим элементом, должен быть выбран автоматически, и наоборот, но данные, связанные с этим, хранятся в локальном файле json.
Вы можете добавить следующий код в конец вашего метода onCreate
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
spinner1.setSelection(position);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
spinner.setSelection(position);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
Он не компилируется или не соответствует вашим требованиям?
приложение на AVD не открывается
Пожалуйста, поделитесь своими данными о сбоях logcat
что ты уже испробовал?