簡體   English   中英

如何使用片段在RecyclerView內部顯示來自ParseQuery的數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM