简体   繁体   English

具有单选和动态数据的自定义ListView

[英]Custom ListView with single choice selection and dynamic data

I'm working on an app that I need to be able to load a list of locations into a ListView, and then let the user select a single location which will then determine the rest of the user's experience down the line. 我正在开发一个应用程序,我需要能够将位置列表加载到ListView中,然后让用户选择一个位置,然后再确定用户剩余的体验。

Currently I have the list of locations being pulled from a JSON request and I can easily display the information into a ListView - the problem I am having though is getting that same list into some form of list that the user can select just one location. 目前,我具有从JSON请求中提取的位置列表,并且可以轻松地将信息显示到ListView中-我遇到的问题是,将同一列表放入某种形式的列表中,用户只能选择一个位置。 I personally have no preference on if it's a radio button list or a spinner. 我个人没有选择是单选按钮列表还是微调框。 I have been trying various methods for the past week now from tutorials on the net, but I can never get any of them to work with my current method of retrieving and storing the list, so I'm finally at wits end and looking for some guidance. 在过去的一周中,我一直在尝试网上教程中的各种方法,但是我永远都无法使用它们来使用当前的方法来检索和存储列表,因此我终于不知所措了,正在寻找一些方法指导。 I am extremely new to java/android programming so I know that my lack of experience is probably the most to blame here. 我对Java / android编程非常陌生,所以我知道我的经验不足可能是这方面的最大责任。 So I guess if someone can at least just point me in the right direction so I'm not spinning my wheels on a solution that would require a ton of re-work then I would greatly appreciate it! 因此,我想如果有人至少可以将我指向正确的方向,以使我不会在需要大量返工的解决方案上放任自己,那么我将不胜感激!

Below is my current activity that retrieves the JSON and slaps it into a standard ListView - I have it storing the info into a DB for use further down the app's line. 以下是我当前的活动,该活动将检索JSON并将其拍打到标准ListView中-我将其存储在数据库中以供应用程序使用。

public class SQLiteJSONParsing extends ListActivity {

private ProgressDialog pDialog;

//////////////////////// JSON URL //////////////////////////

private static String url = "http://my/link/to/json";

//////////////////////// JSON Node Names //////////////////////////

private static final String TAG_CONTACTS = "contacts";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_CON_POSITION = "con_position";
private static final String TAG_ADDRESS = "address";
private static final String TAG_SUBURB = "suburb";
private static final String TAG_STATE = "state";
private static final String TAG_POSTCODE = "postcode";
private static final String TAG_TELEPHONE = "telephone";
private static final String TAG_EMAIL_TO = "email_to";

//////////////////////// JSON Array //////////////////////////

JSONArray contacts = null;
private DatabaseHelper databaseHelper;

//////////////////////// HashMap ListView //////////////////////////

ArrayList<HashMap<String, String>> locationsList;

///////////////////////// Start onCreate method ////////////////////////////

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_launch_options);
    databaseHelper = new DatabaseHelper(SQLiteJSONParsing.this);        

        locationsList = new ArrayList<HashMap<String, String>>();

        //////////////////////// Skip Button //////////////////////////

        Button cancel = (Button)findViewById(R.id.cancel);
        cancel.setOnClickListener(new OnClickListener() 
        {   public void onClick(View v) 
            {   
                Intent locationList = new Intent(SQLiteJSONParsing.this, MainActivity.class);
                    startActivity(locationList);
                    finish();
            }
        });         

        //////////////////////// Start ASYNC //////////////////////////

        new GetLocations().execute();
    }

        //////////////////////// ASYNC HTTP Call //////////////////////////

    private class GetLocations extends AsyncTask<Void, Void, Void> {

        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(SQLiteJSONParsing.this);
            pDialog.setMessage("Loading Locations...");
            pDialog.setCancelable(true);
            pDialog.show();
        }

        //////////////////////// Start Background Service Handler & Load the DB //////////////////////////

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

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

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

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    //////////////////////// Get the JSON Node Array //////////////////////////

                    contacts = jsonObj.getJSONArray(TAG_CONTACTS);

                    //////////////////////// Loop Through the Results //////////////////////////

                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);

                        String id = c.getString(TAG_ID);
                        String name = c.getString(TAG_NAME);
                        String con_position = c.getString(TAG_CON_POSITION);
                        String address = c.getString(TAG_ADDRESS);
                        String suburb = c.getString(TAG_SUBURB);
                        String state = c.getString(TAG_STATE);
                        String postcode = c.getString(TAG_POSTCODE);
                        String telephone = c.getString(TAG_TELEPHONE);
                        String email_to = c.getString(TAG_EMAIL_TO);

                        //////////////////////// Save Records to DB //////////////////////////

                        databaseHelper.saveTableRecord(id, name, con_position, address, suburb, state, postcode, telephone, email_to);

                        //////////////////////// Single Items HashMap //////////////////////////

                        HashMap<String, String> items = new HashMap<String, String>();

                        //////////////////////// Add Items to the HashMap //////////////////////////

                        items.put(TAG_ID, id);
                        items.put(TAG_NAME, name);
                        items.put(TAG_CON_POSITION, con_position);
                        items.put(TAG_ADDRESS, address);
                        items.put(TAG_SUBURB, suburb);
                        items.put(TAG_STATE, state);
                        items.put(TAG_POSTCODE, postcode);
                        items.put(TAG_TELEPHONE, telephone);
                        items.put(TAG_EMAIL_TO, email_to);

                        //////////////////////// Add Items to the LocationsList //////////////////////////

                        locationsList.add(items);
                    }

                    //////////////////////// Capture Exceptions //////////////////////////

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

            return null;
        }

        //////////////////////// Close Progress Dialog //////////////////////////

        protected void onPostExecute(Void location_result) {
            super.onPostExecute(location_result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();


            //////////////////////// Update the Parsed JSON into the ListAdapter //////////////////////////

            ListAdapter locations_adapter = new SimpleAdapter(
                    SQLiteJSONParsing.this, locationsList,
                    R.layout.first_launch_locations_detail, 
                    new String[] { TAG_NAME }, 
                    new int[] { R.id.name });

            setListAdapter(locations_adapter);

    }

}

I used this following example code, which i need to select single item from the listview. 我使用了以下示例代码,我需要从列表视图中选择单个项目。

http://amitandroid.blogspot.in/2013/03/android-custon-single-choice-lsitview.html http://amitandroid.blogspot.in/2013/03/android-custon-single-choice-lsitview.html

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

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