如何将值从动态列表视图传递到活动?

Posted

技术标签:

【中文标题】如何将值从动态列表视图传递到活动?【英文标题】:How to pass value from dynamic list view to activity? 【发布时间】:2016-03-01 17:53:59 【问题描述】:

我是 android 新手,我创建了一个简单的 listview,它从 mysql 获取数据并且一切正常,但现在我想将 listview(Row) 的值传递给另一个活动,当我点击特定我得到空值的行。

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");


            list.setOnItemClickListener(new AdapterView.OnItemClickListener() 

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                        long arg3)  
                    HashMap<String, Object> data = (HashMap<String, Object>) arg0.getItemAtPosition(arg2);
                    Intent intent = new  Intent(getApplicationContext(), SingleMessage.class);
                    intent.putExtra("KEY", data);

                    startActivity(intent);
                

            );


            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() 

            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://.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 
                tryif(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

【问题讨论】:

使用list.setOnItemClickListener获取列表的点击事件 请举个例子 mkyong.com/android/android-listview-example 使用此链接并尝试在 google 上进行自我搜索 【参考方案1】:

将 OnItemClickListener 设置为列表视图

public boolean onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) 
      / /write your code here to send data like
      ModelClass obj = getItem(position);
      String name = obj.getName();
      Intent intent = new Intent(Activity.this, Activity2.class);
      intent.putExtras("Name", name);
      startActivity(intent);

或者你也可以这样做

interfaceObj.sendData(obj);

【讨论】:

以及如何将这个对象发送到另一个活动,正如 user3810679 想知道的那样? 通过意图或使用接口也可以将此对象发送到另一个活动 好的,你可以编辑你的答案来包括这个吗?我没有投反对票,但如果您添加此必要信息,我会投赞成票

以上是关于如何将值从动态列表视图传递到活动?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从基本适配器传递到 Android 中的 Activity

如何将值从列表视图传递到 detalis Activity

如何将值从 tableview 传递到 collectionview

如何将值从其他活动传递给 viewpager 片段?

Informatica 是不是可以将值从 informatica 映射动态传递到 oracle 中的视图

将值从表视图控制器传递到视图控制器