回收站视图无法工作或显示

问题描述 投票:0回答:1

我正在尝试从 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效果。

java android arraylist android-recyclerview
1个回答
0
投票

您可以尝试创建一个新的arrayList来保存您获取的股票并将其传递给suggestAdapter的stockSuggestionArrayList(stockSuggestionArrayList = newList),然后在适配器中调用notifyDataSetChanged()。

© www.soinside.com 2019 - 2024. All rights reserved.