How to use listview from different xml layout file

不打扰是莪最后的温柔 提交于 2020-01-05 04:55:30

问题


I am working on android ListView and i am getting one issue.I created one list view into the XML file installation.xml and i want to use that list view into my Searchdata.java. so basically what i want that when i click on searchdata button than data is fetched from web service and after parsing, it will saved into the listview.and when i click on Installation View button than new window will be appear where i could see that list data.

SearchData.java

public class SearchData extends Activity {
EditText Keyword;
JSONParser jsonparser = new JSONParser();
ListView Datalist;
HorizontalScrollView VideoDatalist;
ArrayList<HashMap<String, String>> DataList;
ArrayList<HashMap<String, String>> VideoDataList;
JSONArray contacts = null;
private ProgressDialog pDialog;
ImageButton searchdata,InstallationView;
String Keyvalue = new String();
private static final String TAG_InnerText = "InnerText";
private static final String TAG_Title = "Title";
private static final String TAG_URL = "URL";
private static final String TAG_VIDEO_URL = "URL";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_data);
        InstallationView=(ImageButton)findViewById(R.id.InstallationView);
        Keyword = (EditText) findViewById(R.id.KeyData);
        Datalist=(ListView)findViewById(R.layout.activity_installation);
        VideoDatalist=(HorizontalScrollView)findViewById(R.id.Horizontallist);
        searchdata=(ImageButton)findViewById(R.id.searchicon);
            String Keyvalue = new String();
        DataList = new ArrayList<HashMap<String, String>>();
        VideoDataList = new ArrayList<HashMap<String, String>>();



        searchdata.setOnClickListener(new View.OnClickListener()   {             
            public void onClick(View v) {

                    new ReadData().execute();                           
            }  
             });



        InstallationView.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v)
            {
                startActivity(new Intent(SearchData.this, Installation.class)); 
            }

            });
    }


    public class ReadData extends AsyncTask<Void, Void, Void>
    {
         @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(SearchData.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        protected Void doInBackground(Void... arg0) {

           try{
               Keyvalue=Keyword.getText().toString();

                String Jsonstr = jsonparser.makeHttpRequest("http://10.47.93.26:8080/Search/api/Search/"+Keyvalue);


                try {
                if (Jsonstr != null) {

                    JSONArray    jsonObj = new JSONArray (Jsonstr);

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


                            String name = c.optString(TAG_Title);
                            String url = c.optString(TAG_URL);

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


                            if( !name.isEmpty() )
                            {
                            info.put(TAG_Title, name);
                            }
                            else
                            {
                                info.put(TAG_Title,"User Manual");
                            }


                            if(url.contains("youtube"))
                            {

                                info.put(TAG_URL, url);
                                VideoDataList.add(info);

                            }
                            else
                            {

                            info.put(TAG_URL, url);
                            DataList.add(info);
                            }

                        }

                    }   

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

   return null;
    }


        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if (pDialog.isShowing())
                pDialog.dismiss();

            SimpleAdapter adapter = new SimpleAdapter(
                    SearchData.this, DataList,
                    R.layout.list_item, new String[]
                            {   
                            TAG_Title
                             }, new int[] { 
                            R.id.InnerText });
            Datalist.setAdapter(adapter);

        }
    }
}

web service running and parsing code is running correctly. i am getting error at post method,so can you help me on this.

Error


回答1:


In the onCreate(...) method of your SearchData Activity, the following can never work and will always return 'null' (hence your NullPointerException)...

Datalist=(ListView)findViewById(R.layout.activity_installation);

Calling findViewById(...) will only work for any UI elements which have been inflated when you called setContentView(...). In this case you used R.layout.activity_search_data for your layout file which doesn't contain a ListView with an id of R.layout.activity_installation which is, by the way, a resource id of a layout file and not a resource id of a UI element.

The only way you can do what you need is to put your data as an extra into the Intent you use when you call...

startActivity(new Intent(SearchData.this, Installation.class)); 

...when the Installation Activity is created it will then need to get the data and create its own adapter.

EDIT: HashMap is Serializable and can be passed as an Intent extra. Pass your DataList HashMap as follows...

Intent i = new Intent(SearchData.this, Installation.class);
i.putExtra("data_list", DataList);
startActivity(i);

In the Installation Activity you can then use...

getIntent().getSerializableExtra("data_list");



回答2:


Call your Installation activity in onClick() method:

And pass your ArrayList data through intent,

        InstallationView.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v)
        {
            Intent intent= new Intent(SearchData.this, Installation.class);
            intent.putParcelableArrayListExtra("HASH_MAP",DataList);
            startActivity(intent); 
        }

        });

In your Installation activity class,set the view in onCreate() and initialize listview from xml file:

  setContentView(R.layout.activity_installation);
  ListView listView = (ListView)findViwById(R.id.listview);

And try to get the data from intent:

 ArrayList<HashMap<String,String>> hashmap_dataList = getIntent.getParcelableArrayListExtra("HASH_MAP");

then do whatever you want with listview and hashmap.



来源:https://stackoverflow.com/questions/29470136/how-to-use-listview-from-different-xml-layout-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!