简体   繁体   English

我的问题是,如何将片段中从JSON获得的列表数据传递给活动?

[英]My questions is, how do I pass the list data i have obtained from JSON in a fragment to an activity?

This is my Fragment Class - Here i get the JSON array object and call the adapter class for setting it. 这是我的片段类-在这里,我获取JSON array object并调用适配器类进行设置。 In the corressponding XML file , i have used a card view and lsit view to display the data. 在相应的XML file ,我使用了名片视图和lsit视图来显示数据。 i want to know how to implement a onItemClickListener{} function so that i can go to another activity and display the list in a more detailed manner. 我想知道如何实现onItemClickListener{}函数,以便我可以转到另一个活动并以更详细的方式显示列表。

{
    String url = "http://www.appplay.in/student_project/public/staff_details";

    ProgressDialog mProgressDialog;
    ListView lvDetail;
    Context context;
    ArrayList<staff_model> myList = new ArrayList<>();
    ListView lv;
    public static ArrayList<staff_model> staff_array;

    JSONObject jsonObject;
    JSONObject jsonKey;
    Button submit;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, final Bundle savedInstanceState) {
        context=container.getContext();
        View v = inflater.inflate(R.layout.tab_fragment_2, container, false);

        lvDetail = (ListView) v.findViewById(R.id.CustomList);
        //  submit=(Button)v.findViewById(R.id.button) ;
        new GetGalleryimage().execute();
            v.setOnClickListener(new View.OnClickListener() {
                @Override public void onClick(View v) {
                    Intent in = new Intent(getActivity(), Staff_Main.class);
                    startActivity(in);
                }
            });
        return v;
    }

    public void positionAction(View view) {
        int position = (int) view.getTag();
        Toast.makeText(view.getContext(),Integer.toString(position),Toast.LENGTH_SHORT).show();
    }

    private class GetGalleryimage extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            mProgressDialog = new ProgressDialog(getActivity());
            mProgressDialog.setMessage("Please wait...");
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // Creating service handler class instance
            ServiceHandler sh = new ServiceHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);
                    JSONArray jsonarr = jsonObj.getJSONArray("User_Details");
                    for(int i=0; i<jsonarr.length(); i++)
                    {
                        JSONObject jsonObject = jsonarr.getJSONObject(i);

                        myList.add(new staff_model(jsonObject.getString("name"),jsonObject.getString("dob"),jsonObject.getString("occupation"),jsonObject.getString("emailid"),jsonObject.getString("contact"),jsonObject.getString("timetable"),jsonObject.getString("image")));

                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            Log.v("result",""+result);
            if (mProgressDialog.isShowing())
                mProgressDialog.dismiss();
            staff_BaseAdapter rcAdapter = new staff_BaseAdapter(getActivity(),0, myList);
            lvDetail.setAdapter(rcAdapter);
        }
    }

    public class MAP_Detailservice extends
            AsyncTask<String, String, String> {

        Context mContext;
        JSONObject mJsnObj;
        ProgressDialog mProgressDialog;

        @Override
        protected void onPreExecute() {
            showProgress();
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... strings) {
            JSONObject json = new JSONObject();
            String cricketAllMatchesLink = "http://www.appplay.in/student_project/public/staff_details";

            try {
                return String.valueOf(HttpUtils.getJson(cricketAllMatchesLink));
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            Log.v("POST EXECUTE", "RESULT :" + result);
            super.onPostExecute(result);
            hideProgress();
            // mProgressDialog.dismiss();
            // if (HttpUtils.status == 408) {
            // Toast.makeText(getActivity(), "Conection Lost ",
            // Toast.LENGTH_SHORT).show();
            // }
            try {

                JSONArray array = new JSONArray(result);

                JSONObject mJsonObject = array.getJSONObject(0);

                // ArrayList<user_agent> GetSearchResults();
                ArrayList<staff_model> staff_result = new ArrayList<staff_model>();

                /**
                 * Question Array Parsing
                 */

                JSONArray jsonQuesstionsArray = mJsonObject
                        .getJSONArray("User_Details");

                for (int i = 0; i < jsonQuesstionsArray.length(); i++) {
                    // Reading questions
                    JSONObject jsonQuestionObject = jsonQuesstionsArray
                            .getJSONObject(i);
                    String name = jsonQuestionObject.getString("name");
                    String dob = jsonQuestionObject.getString("dob");
                    String occupation = jsonQuestionObject.getString("occupation");
                    String emailid = jsonQuestionObject.getString("emailid");
                    String contact = jsonQuestionObject.getString("contact");
                    String timetable = jsonQuestionObject.getString("timetable");
                    String image = jsonQuestionObject.getString("image");
                }
                lvDetail.setAdapter(new staff_BaseAdapter(
                        getActivity(), 0,staff_result));
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public void showProgress() {
        mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setMessage("Loading please wait");
        mProgressDialog.setCancelable(false);
        mProgressDialog.show();
    }

    public void hideProgress() {
        if (mProgressDialog != null && mProgressDialog.isShowing()) {
            mProgressDialog.dismiss();
        }
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        if ( mProgressDialog!=null && mProgressDialog.isShowing() ){
            mProgressDialog.cancel();
        }
    }
}

This is my Adapter class - Where I have gotten the data and set the code 这是我的适配器类-在哪里获取数据并设置代码

ArrayList<StaffList> myList = new ArrayList<StaffList>();
        LayoutInflater inflater;
        Context context;

        public StaffBaseAdapter(Context context, ArrayList<StaffList> myList) {
            this.myList = myList;
            this.context = context;
            inflater = LayoutInflater.from(this.context);
        }

        @Override
        public int getCount() {
            return myList.size();
        }

        @Override
        public StaffList getItem(int position) {
            return myList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            MyViewHolder mViewHolder;

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.staff_list_view, parent, false);
                mViewHolder = new MyViewHolder(convertView);
                convertView.setTag(mViewHolder);
            } else {
                mViewHolder = (MyViewHolder) convertView.getTag();
            }

            StaffList currentListData = getItem(position);

            mViewHolder.tvTitle.setText(currentListData.getTitle());

            return convertView;
        }

        private class MyViewHolder {
            TextView tvTitle, tvDesc;
            ImageView ivIcon;

            public MyViewHolder(View item) {
                tvTitle = (TextView) item.findViewById(R.id.tvTitle);
            }
        }
    }

This is my Model Class 这是我的模特班

String title;
int imgResId;

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public int getImgResId() {
    return imgResId;
}

public void setImgResId(int imgResId) {
    this.imgResId = imgResId;
}

}

first your model class "staff_model" implement parcelable it will help to transfer your single model item pass to other activity. 首先,您的模型类“ staff_model”实现可打包,这将有助于将单个模型项传递传递给其他活动。 Then add ItemClickListener in your listview 然后在您的列表视图中添加ItemClickListener

add this into your getView function 将此添加到您的getView函数中

 MyViewHolder rowHolder=new MyViewHolder(convertView);
 rowHolder.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {

       //do whatever u want


                }
            });
listView.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
         //Here you can convert your json to string 
         startActivity(new Intent(this, MainActivity.class).putExtra("myList",new Gson().toJson(list)));
     }
});

and in your receiving activity 并且在您的接收活动中

Type type = new TypeToken<List<String>>() {
        }.getType();
        List<String> list1=new Gson().fromJson(getIntent().getStringExtra("myList"),type);

Here Specify the TypeToken .You will have the exact json that you passed in the intent. 在这里指定TypeToken。您将拥有您在意图中传递的确切json。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM