[英]How to display data from A ParseQuery inside a RecyclerView using Fragments?
我有一些嘗試使用ParseQuery從Parse.com獲取的數據,然后我想使用A Fragment在RecyclerView中顯示該數據。 問題是什么都沒有顯示。 我怎樣才能解決這個問題?
我的RecyclerView適配器:
public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerViewAdapter.ViewHolder> {
//private List<Developer> developerList;
private List<Information> informationList;
public static class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
//public final ImageView mImageView;
public final TextView mTextView;
public ViewHolder(View view) {
super(view);
mView = view;
//mImageView = (ImageView) view.findViewById(R.id.txt_photo);
mTextView = (TextView) view.findViewById(R.id.txt_status);
}
@Override
public String toString() {
return super.toString() + " '" + mTextView.getText();
}
}
public HomeRecyclerViewAdapter(List<Information> informationList) {
this.informationList = informationList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.home_recyclerview_list_items, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
final Information information = informationList.get(position);
holder.mTextView.setText(information.getStatus());
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO MOVE THIS CODE TO A DELEGATE, THIS CAST IS EVIL
Context context = v.getContext();
Intent intent = new Intent(context,DetailActivity.class);
intent.putExtra(Config.EXTRA_NAME, information.getStatus());
//intent.putExtra(Config.EXTRA_PHOTO, information.getFoto());
context.startActivity(intent);
}
});
/*Glide.with(holder.mImageView.getContext())
.load(developer.getFoto())
.fitCenter()
.into(holder.mImageView);*/
}
@Override
public int getItemCount() {
return informationList.size();
}
}
我的FragmentBase:
我所有其他片段都擴展了這一點
public abstract class FragmentBase extends
Fragment {
protected void settingsToolbar(View rootView) {
Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar);
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (actionBar != null) {
actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
}
FragmentHome:
這是包含我的RecyclerView和ParseQuery的片段
public class FragmentHome extends FragmentBase{
public static FragmentHome getInstance() {
FragmentHome fragmentHome = new FragmentHome();
Bundle extraArguments = new Bundle();
fragmentHome.setArguments(extraArguments);
return fragmentHome;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
RecyclerView rv_home = (RecyclerView) inflater.inflate(R.layout.home_recyclerview, container, false);
setupRecyclerView(rv_home);
return rv_home;
}
private void setupRecyclerView(RecyclerView recyclerView) {
recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
recyclerView.setAdapter(new HomeRecyclerViewAdapter(info()));
}
private List<Information> info() {
final List<Information> infoData = new ArrayList<>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Timeline");
query.setLimit(10);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(final List<ParseObject> objects, ParseException e) {
if (e == null) {
for (int i = 0; i < objects.size(); i++) {
Information information = new Information();
information.setStatus(objects.get(i).getString("status"));
infoData.add(information);
}//end for loop
} else {
}//End else
}
});
return infoData;
}
}
我的數據模型:
包含getter和setter
public class Information {
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
我的RecyclerView項目列表XML文件:
這包含我想在RecyclerView中填充的視圖列表
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:gravity="center_vertical">
<TextView
android:id="@+id/txt_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?attr/textAppearanceListItem"/>
</LinearLayout>
我的RecyclerView XML文件:
這包含我實際的RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerview_home"
android:layout_width="match_parent"
android:layout_height="match_parent" />
注意:如我的答案所示,上面的(在我的問題中)“ FragmentHome”現在是“ FragmentHome2”。
將此答案提交給將來可能會有用的人
FragmentationHome2:
public class FragmentHome2 extends FragmentBase {
final List<Information> infoData = new ArrayList<>();
public static FragmentHome2 getInstance() {
// Required empty public constructor
FragmentHome2 fragmentHome = new FragmentHome2();
Bundle extraArguments = new Bundle();
fragmentHome.setArguments(extraArguments);
return fragmentHome;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/*@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
RecyclerView rv_home = (RecyclerView) inflater.inflate(R.layout.home_recyclerview, container, false);
setupRecyclerView(rv_home);
return rv_home;
}*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
//return inflater.inflate(R.layout.fragment_two, container, false);
//Using the "View" to obtain the WebView
final View view = inflater.inflate(R.layout.fragment_home, container, false);
//initializing the Recycler View
RecyclerView rvHome = (RecyclerView) view.findViewById(R.id.recyclerview_home);
//pass the new initialized variable to the method for use
setupRecyclerView(rvHome);
//ParseQuery();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Timeline");
query.setLimit(10);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(final List<ParseObject> objects, ParseException e) {
if (e == null) {
for (int i = 0; i < objects.size(); i++) {
Information information = new Information();
information.setStatus(objects.get(i).getString("status"));
//information.setMainNewsStory(information.mNewsStory = objects.get(i).getString("shortinfo"));
infoData.add(information);
}//end for loop
} else {
// something went wrong
//Toast.makeText(getApplicationContext(), "A problem occurred. Could not display news feed", Toast.LENGTH_LONG).show();
}//End else
//progress.dismiss();
final HomeRecyclerViewAdapter mAdapter = new HomeRecyclerViewAdapter(getContext(), infoData);
//initialize the recycler view
RecyclerView rv = (RecyclerView) view.findViewById(R.id.recyclerview_home);
//use recycler view initialized variable to set adapter to current state
rv.setAdapter(mAdapter);
//notify data changes
mAdapter.notifyDataSetChanged();
}
});
return view;
}
//Set the recycler view adapter
private void setupRecyclerView(final RecyclerView recyclerViewMain) {
final LinearLayoutManager layoutManager = new LinearLayoutManager(recyclerViewMain.getContext());
recyclerViewMain.setLayoutManager(layoutManager);
recyclerViewMain.setAdapter(new HomeRecyclerViewAdapter(getContext(),infoData ));
recyclerViewMain.setHasFixedSize(true);
}
}
RecyclerView布局包含在該片段調用的布局內:
<include layout="@layout/home_recyclerview" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.