如何从listview android获取值?

时间:2015-12-01 10:46:54

标签: android mysql listview android-listview

我是android的新手。我从mysql获取数据并在listview.things中显示它工作正常但现在我想在用户点击listview(行)时将值传递给intent。我已经实现了setOnItemClickListener.but列表视图是动态的,所以我没有得到如何获取值并将其传递给意图。

提前致谢

public class AdminNotice extends Activity {

    private String[] navMenuTitles;
    private TypedArray navMenuIcons;
    private EditText editTextName;
    SharedPreferences sp;
    private String jsonResult;
    private ListView listView;
    private Button b;
    EditText etname, et;
    TextView tv;
    String myJSON;
    private static final String TAG = "MainActivity.java";
    private static final String TAG_NAME = "notice";
    private static final String TAG_DATE = "ndate";
    ProgressBar progressBar;
    Date date;
    JSONArray peoples = null;

    ArrayList<HashMap<String, String>> personList;

    ListView list;



    public static final String USER_NAME = "USERNAME";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.noticelist);
        progressBar = (ProgressBar) findViewById(R.id.progressbar);


        //SharedPreferences myprefs= getSharedPreferences("user", MODE_WORLD_READABLE);
        // String session_id= myprefs.getString("session_id", null);


        //TextView textView = (TextView) findViewById(R.id.fname);

        //textView.setText("Welcome "+session_id);





        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

        navMenuIcons = getResources().obtainTypedArray(R.array.nav_drawer_icons);
        // load icons from
        // strings.xml


        list = (ListView) findViewById(R.id.listView);
        personList = new ArrayList<HashMap<String,String>>();

        getData();




    }



    //send messages stop

    //get json data start
    protected void showList(){
        try {
            JSONArray peoples = new JSONArray(myJSON);


            for(int i=0;i<peoples.length();i++){
                JSONObject c = peoples.getJSONObject(i);
                String name=null, date=null;

                /*if(c==null){
                    ProgressDialog progress = new ProgressDialog(this);
                    progress.setTitle("Loading");
                    progress.setMessage("Wait while loading...");
                    progress.show();
                }*/



                if(c.has("notice"))
                if(c.has("ndate"))




                progressBar.setVisibility(View.GONE);
                name = c.getString("notice");
                date = c.getString("ndate");




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


                persons.put(TAG_NAME,name);
                persons.put(TAG_DATE,date);
                personList.add(persons);
            }



            ListAdapter adapter = new SimpleAdapter(
                    AdminNotice.this, personList, R.layout.list_item1,
                    new String[]{TAG_NAME,TAG_DATE},
                    new int[]{R.id.name, R.id.date}
            );

            list.setAdapter(adapter);

            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int position,
                                        long id) {





                        /*ModelClass obj = getItem(position);
                        String name = obj.getName();*/


                    // Simple Toast to show the position Selected
                    Log.d("SELECT_POSITION", "Position For this List Item = " + position);
                }

            });

           /* list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                public void onItemClick(AdapterView parent, View view, int position, long id) {


                    Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();

                }

            });*/





        } catch (JSONException e) {
            Log.i("tagconvertstr", "["+myJSON+"]");
        }
    }





    public void getData(){
        class GetDataJSON extends AsyncTask<String, Void, String>{


            @Override
            protected String doInBackground(String... params) {

                SharedPreferences myprefs= getSharedPreferences("user", MODE_WORLD_READABLE);
                String session_id= myprefs.getString("session_id", null);

                InputStream inputStream = null;
                String result = null;
                try {

                    String postReceiverUrl = "http://notice.php";

                    // HttpClient
                    HttpClient httpClient = new DefaultHttpClient();

                    // post header
                    HttpPost httpPost = new HttpPost(postReceiverUrl);

                    // add your data
                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                    nameValuePairs.add(new BasicNameValuePair("username", session_id));

                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpClient.execute(httpPost);
                    HttpEntity resEntity = response.getEntity();

                    inputStream = resEntity.getContent();
                    // json is UTF-8 by default
                    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                    StringBuilder sb = new StringBuilder();

                    String line = null;
                    while ((line = reader.readLine()) != null)
                    {
                        sb.append(line + "\n");
                    }
                    result = sb.toString();
                } catch (Exception e) {
                    Log.i("tagconvertstr", "["+result+"]");
                    System.out.println(e);
                }
                finally {
                    try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
                }
                return result;
            }

            @Override
            protected void onPostExecute(String result){
                myJSON = result;
                showList();
            }
        }
        GetDataJSON g = new GetDataJSON();
        g.execute();
    }
    //get json data stop

}

4 个答案:

答案 0 :(得分:0)

在listview中的onItemClickListener

Intent intent=new Intent(currentyactivty.this,secondactiviy.class);
intent.putExtra("TAG_NAME",  personList.get(position).get(TAG_NAME));
startActivity(intent);

在onCreate方法的第二个活动中获取数据

String data;
Intent in=getIntent();

if(in!=null && in.hasExtra("TAG_NAME")){
    data=in.getStringArrayExtra("TAG_NAME");
}

答案 1 :(得分:0)

您可以在视图中设置文字             list.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position,
                                    long id) {


             Intent intent=new Intent(currentyactivty.this,secondactiviy.class);
              intent.putExtra("NAME",  personList.get(position).get(TAG_NAME));
              startActivity(intent);



                // Simple Toast to show the position Selected
                Log.d("SELECT_POSITION", "Position For this List Item = " + position);
            }

        });

答案 2 :(得分:0)

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position,
                            long id) {





            /*ModelClass obj = getItem(position);
            String name = obj.getName();*/

        String personName = personList.get(position).get(TAG_NAME);
        Intent i = new Intent(AdminNotice.this, YourNextActivity.class);
        i.putExtra("person_name", personName);
        startActivity(i);
        // Simple Toast to show the position Selected
        Log.d("SELECT_POSITION", "Position For this List Item = " + position);
    }

});

答案 3 :(得分:0)

你可以使用bundle来传递来自intent的数据。

   list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position,
                                    long id) {





                    ModelClass obj = getItem(position);
                    String name = obj.getName();
                    String date = obj.getDate();
                    Bundle bundle = new Bundle();
                    bundle.putString("name", name);
                    bundle.putString("date", date );
                    Intent in = new Intent(currentActivity.this,destinationActivity.class);
                    in.putExtras(b);
                    startActivity(in);



                // Simple Toast to show the position Selected
                Log.d("SELECT_POSITION", "Position For this List Item = " + position);
            }

        });

你可以通过这样做来获得其他活动。

 protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    Intent in = getIntent();
    Bundle b = in.getExtras();
    String name = b.getString("name");
    String date = b.getString("date);
}

使用这种方法,您不必再次访问数据库来检索数据,而是保存了一个查询。

同样,如果你愿意,你也可以发送你'id'。

但如果您只想传递'id',那么@Nas方法将更加分类和简单。