2017-01-25 5 views
0

Я получаю String из моей базы данных MySQL, которая отлично работает. После того, как я получил данные, я пытался установить данные в Setter и заполнить данные в моем RecyclerAdapter, чтобы вывести его как список, но он не будет работать. Единственное, что работает, это получение данных из моего db и установка setter после этого, они не работают, не знают почему.Android: Setter in Fragment & get String в 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; 
} 

Здесь я получаю данные моей базы данных и проверяю, работает ли это путем создания данных в виде тоста, и это работает нормально.

Это мой адаптер. Я уже пробовал некоторые вещи, но они не сработают, может быть, один из вас, ребята, мог бы помочь мне здесь. Поэтому я хочу добавить данные 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

Эй, во-первых спасибо за ваш ответ, и что вы пытаетесь мне помочь. Извините за вопрос, но что имеется в виду с «newsDataArray» в getItemCount. У меня нет объекта, который называется newsDataArray. Снова жаль, что я совсем не знаком с этой темой. –

+0

Это имя-заполнитель для массива, который содержит объекты NewsData, переданные как параметр при создании адаптера в вашей деятельности. –

0

Pass первоначальный список к адаптеру:

private ArrayList<NewsData> newsData; 

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

Fetch новые данные из базы данных в AsyncTask в doInBackground(). Там вы можете проанализировать данные и создать свои объекты. В onPostExceute() вы можете изменить данные вашего адаптера. Например, вы добавьте в адаптере и назвать его в onPostExceute():

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

 Смежные вопросы

  • Нет связанных вопросов^_^