我正在尝试从 API 获取数据并将其保存在 Recycler View 适配器中使用的数组列表中。但它没有显示。当用户搜索时,每次文本更改都会生成一个 API 调用,我们从 API 获取数据,我试图将该数据添加到用于创建 Recycler View 适配器的同一数组列表中,并且 Recycler 视图位于搜索栏下方因此它显示为从 API 搜索(如 autocompleteTextView)返回的建议。
这是代码:
主要活动:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private EditText et_DataInput;
RecyclerView recyclerView;
ArrayList<stockSuggestionModel> stockSuggestionList;
// There we are adding Data in Array
public void addElement(stockSuggestionModel element){
stockSuggestionList.add(element);
}
stockSuggestAdapter suggestAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_DataInput = (EditText) findViewById(R.id.et_inputData);
// ArrayList
stockSuggestionList = new ArrayList<>();
// recycler view
recyclerView = findViewById(R.id.searchSuggestion);
// Adapter redefining;
suggestAdapter = new stockSuggestAdapter(MainActivity.this, stockSuggestionList);
// It is used to tell in which form our layout will be.
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// set Adapter
recyclerView.setAdapter(suggestAdapter);
//To make the search facility which captures (one by one variable).
et_DataInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String quearyString = et_DataInput.getText().toString();
// if else condition for blank
Log.i(TAG, "Search: " + quearyString);
// There we have created
// There we are adding data to the ArrayList to Show-Up
FetchStock fetchStock = new FetchStock();
fetchStock.execute(quearyString);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
获取库存:
JSONObject jsonObject = new JSONObject(s);
// There can be a problem as there is Two Data name variable.
JSONArray data = jsonObject.getJSONArray("data");
for (int i=0; i < data.length(); i++){
// Instance of Model Class
stockSuggestionModel StockSuggestionModel = new stockSuggestionModel();
// JsonObject to really get Data
JSONObject itemsArray = data.getJSONObject(i);
// variable to transmit data
String symbol = null;
String instrument_name = null;
String exchange = null;
try {
symbol = itemsArray.getString("symbol");
instrument_name = itemsArray.getString("instrument_name");
exchange = itemsArray.getString("exchange");
} catch (Exception e){
e.printStackTrace();
}
if(symbol != null && instrument_name != null){
StockSuggestionModel.setStockName(instrument_name);
StockSuggestionModel.setStockSymbol(symbol);
String instrument = StockSuggestionModel.getStockName();
Log.i(TAG, "Data Has adding into the array used by adapter");
Log.i(TAG,""+instrument);
// adding data into the arrayList
MainActivity mainActivity = new MainActivity();
mainActivity.addElement(StockSuggestionModel);
}
}
stockSuggestionModel.java:
public class stockSuggestionModel {
String stockName;
String stockSymbol;
public stockSuggestionModel(String stockName, String stockSymbol) {
this.stockName = stockName;
this.stockSymbol = stockSymbol;
}
public stockSuggestionModel() {
}
public String getStockName() {
return stockName;
}
public void setStockName(String stockName) {
this.stockName = stockName;
}
public String getStockSymbol() {
return stockSymbol;
}
public void setStockSymbol(String stockSymbol) {
this.stockSymbol = stockSymbol;
}
}
stockSuggestAdapter.java
public class stockSuggestAdapter extends RecyclerView.Adapter<stockSuggestAdapter.viewHolder> {
Context context;
ArrayList<stockSuggestionModel> stockSuggestionArrayList;
public stockSuggestAdapter(Context context, ArrayList<stockSuggestionModel> stockSuggestionArrayList) {
this.context = context;
this.stockSuggestionArrayList = stockSuggestionArrayList;
}
@NonNull
@Override
public stockSuggestAdapter.viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.suggest_items, parent, false);
stockSuggestAdapter.viewHolder StockSuggestAdapter = new stockSuggestAdapter.viewHolder(view);
return StockSuggestAdapter;
}
@Override
public void onBindViewHolder(@NonNull stockSuggestAdapter.viewHolder holder, int position) {
stockSuggestionModel StockSuggestion = stockSuggestionArrayList.get(position);
holder.stockName.setText(String.valueOf(StockSuggestion.stockName));
holder.stockSymbol.setText(String.valueOf(StockSuggestion.stockSymbol));
// We also need a Func when User Click on our List. (userAdapter of Java Messenger has implementation of this)
}
@Override
public int getItemCount() {
return stockSuggestionArrayList.size();
}
public class viewHolder extends RecyclerView.ViewHolder {
TextView stockName;
TextView stockSymbol;
public viewHolder(@NonNull View itemView) {
super(itemView);
stockName = itemView.findViewById(R.id.stockName);
stockSymbol= itemView.findViewById(R.id.stockSymbol);
}
}
}
如有其他需要,请询问并提前致谢。
尝试从API获取数据并将其添加到Recycler View使用的Array List中,以便在搜索栏下显示recycler view作为autoCompleteTextView效果。
您可以尝试创建一个新的arrayList来保存您获取的股票并将其传递给suggestAdapter的stockSuggestionArrayList(stockSuggestionArrayList = newList),然后在适配器中调用notifyDataSetChanged()。