2017-01-25 4 views
0

私はというデータベースからうまく動作するStringを取得しています。私はデータを取得した後、私はセッターでデータを設定しようとしていましたが、RecyclerAdapterでデータを取得してリストとして出力しましたが、うまくいきませんでした。 動作する唯一のものは、私のデータベースからデータを取得し、それが動作しない理由を知らないということの後にセッターを設定しています。Android:Setter in Fragment&RecyclerViewAdapterの文字列を取得する

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; 
} 

それがトーストとしてデータを作成することで動作し、それが正常に動作している場合ここで私は自分のデータベースとテストのデータを取得しています。

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; 
    } 
} 

これは私の既に使っているアダプターですが、私はいくつかのことを試しましたが、あなたの誰かがここで助けてくれるかもしれません。だからMySQLのデータをRecyclerViewに追加したいと思います。 (私は「parseJSON」に入ったデータ)

私のアダプタは、私が間違っていたすべてのものを削除し、

をいけない仕事としてモーメントとしてほぼ空である私は、あなたはそれが非常に良いではありません私の英語を理解することができます願っています。しかし、お手数をおかけしていただきありがとうございます:-)

答えて

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(); 
    } 
} 

これがオフの場合は、それに応じて調整してください。

+0

ご回答いただきありがとうございました。申し訳ございませんが、getItemCountの "newsDataArray"の意味は何ですか。私はnewsDataArrayと呼ばれるObjectを持っていません。もう一度申し訳ありませんが、このテーマは全く新しいです。 –

+0

これは、アクティビティでアダプタを作成するときにパラメータとして渡される、NewsDataオブジェクトを含む配列のプレースホルダ名です。 –

0

は、アダプタに最初のリストを渡します。

private ArrayList<NewsData> newsData; 

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

doInBackground()AsyncTaskでデータベースから新しいデータを取得します。そこで、データを解析してオブジェクトを作成することができます。 onPostExceute()では、アダプタのデータを変更できます。たとえば、これをアダプタに追加してonPostExceute()に呼び出します。

public void add(NewsData data) { 
    this.newsData.add(data); 
    notifyDataSetChanged(); 
} 
関連する問題