Android:Setter in Fragment&在RecyclerViewAdapter中获取String

时间:2017-01-25 14:38:35

标签: java android mysql android-recyclerview fragment

我从我的MySQL数据库中获得了public ArrayList<NewsData> parseJSON(String result) { ArrayList<NewsData> newsData = new ArrayList<NewsData>(); try { JSONArray jArray = new JSONArray(result); for (int i = 0; i < jArray.length(); i++) { JSONObject json_data = jArray.getJSONObject(i); NewsData nd = new NewsData(); nd.setTitle(json_data.getString("title")); Toast.makeText(getActivity(), nd.getTitle(), Toast.LENGTH_SHORT).show(); newsData.add(nd); } } catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); } return newsData; } ,该数据库工作正常。在我获得数据后,我试图在Setter中设置数据并填写一个获取我的RecyclerAdapter中的数据以将其作为列表输出但它不起作用。 唯一有效的方法是从我的数据库获取数据并设置setter之后它不会工作不知道为什么。

public class HomeRecyclerAdapter extends RecyclerView.Adapter<HomeRecyclerAdapter.ViewHolder> {

    private Context context;

    class ViewHolder extends RecyclerView.ViewHolder {

        public TextView itemTitle;
        public TextView holeText;

        public ViewHolder(final View itemView) {
            super(itemView);
            itemTitle = (TextView) itemView.findViewById(R.id.title_cView);
            holeText = (TextView) itemView.findViewById(R.id.text);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    context = itemView.getContext();
                }
            });
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.layout_cardviewhome, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    }

    @Override
    public int getItemCount() {
        return 2;
    }
}

在这里,我将获取数据库的数据,并通过将数据设置为Toast来测试它是否有效,并且工作正常。

MySQL

这是我的适配器我已经尝试了一些东西,但他们不会工作,也许你们中的一个人可以帮助我。所以我想将RecyclerView的数据添加到parseJSON。 (我收到的数据&#34; {{1}}&#34;)

我的适配器几乎是空的,因为我删除了所有错误但不工作的那一刻

我希望你能理解我的英语,这不是很好。但总的来说,感谢您试图提供帮助: - )

2 个答案:

答案 0 :(得分:0)

我猜你应该将newsData作为参数传递给适配器构造函数。在onBindViewHolder中,您可以通过从项目中获取来设置TextViews信息。例如:

    public class HomeRecyclerAdapter extends RecyclerView.Adapter<HomeRecyclerAdapter.ViewHolder> {

    private Context context;
    private ArrayList<NewsData> newsData;

    public HomeRecyclerAdapter (ArrayList<NewsData> newsData, Context context) {
       this.newsData = newsData;
       this.context = context;
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        public TextView itemTitle;
        public TextView holeText;

        public ViewHolder(final View itemView) {
            super(itemView);
            itemTitle = (TextView) itemView.findViewById(R.id.title_cView);
            holeText = (TextView) itemView.findViewById(R.id.text);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    context = itemView.getContext();
                }
            });
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.layout_cardviewhome, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        NewsData thisNewsData = newsData.get(position);

        holder.itemTitle.setText(thisNewsData.getItemTitle());
        holder.holeText.setText(thisNewsData.getHoleText());
    } 

    @Override
    public int getItemCount() {
        return newsDataArray.size();
    }
}

如果有什么东西关闭,请相应调整并告诉我这是否有帮助。

答案 1 :(得分:0)

将初始列表传递给适配器:

private ArrayList<NewsData> newsData;

public HomeRecyclerAdapter (ArrayList<NewsData> newsData) {
   this.newsData = newsData;
}

AsyncTask doInBackground()中的数据库中获取新数据。在那里,您可以解析数据并创建对象。在onPostExceute()中,您可以修改适配器的数据。例如,您将其添加到适配器并在onPostExceute()中调用它:

public void add(NewsData data) {
  this.newsData.add(data);
  notifyDataSetChanged();
}