1

我需要创建一个登录应用程序,我必须在成功登录身份验证和用户名列表视图的 onItemClick 时仅在列表视图中显示用户名,我必须在另一个活动的文本视图中显示用户详细信息,如姓名、电子邮件和地址。所有用户详细信息都应从 Xml 文件中解析。

基本上,我有三个活动,即 1. Login.java 2. Users.java 3. UserDetails.java

但是,我已将用户名从(Users.java)列表视图发送到 userdetails(在 Textview 上)。现在,我需要向 (UserDetails) 活动发送电子邮件、地址。问题是电子邮件和地址不在(Users.java)列表视图中,我只显示用户名。

任何帮助将不胜感激。谢谢 !

这是我的Users.java

public class Users extends Activity {

ListView myList ;
List<String> fillUsers;
List<String> fillemail;
List<String> fillphone;
List<String> fillplace;
List<String> titles;
List<String> link1;

//private List<Map<String, Object>> data;
private ListView listView = null;

private List<com.example.firstapp.Message> messages;

static final String KEY_FNAME = "fname";
static final String KEY_LNAME = "lname";
static final String KEY_EMAIL = "email";
static final String KEY_PHONE = "phone";
static final String KEY_PLACE = "place";
List headlines;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_users);

    new MyAsyncTask().execute();

 }


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

    ProgressDialog mProgressDialog;

    @Override
    protected void onPostExecute(Void result) {
        mProgressDialog.dismiss();

       final ListView listView = (ListView) findViewById(R.id.listview);

     final ArrayAdapter<String>  listAdapter= new ArrayAdapter<String>(Users.this, android.R.layout.simple_list_item_1, fillUsers); 

        listView.setAdapter(listAdapter);


    try{
        listView.setOnItemClickListener(new OnItemClickListener() {

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


                String selectedFromList =(String) (listView.getItemAtPosition(position));

                System.out.println("Testing 006: "+fillemail+fillphone+fillplace);

                 System.out.println("Testing 008: "+selectedFromList);

                 Intent in = new Intent(Users.this,UserDetails.class);

                 System.out.println("Testing 009: ");


                 Bundle myBundle = new Bundle(); //create a Bundle
                 myBundle.putString("username",selectedFromList);
                 myBundle.putInt("userid",1234);
                 System.out.println("Testing 010: ");

                 in.putExtras(myBundle); //PUT THE Bundle you created in the Intent
                 startActivityForResult(in, 0);
                 System.out.println("Testing 010: ");

                }
             });
        }catch(Exception ex){

           System.out.println("On item click : 0070"+ex.toString());
           System.out.println("On item click : 0080"+ex.getStackTrace().toString());
        }

    }

    @Override
    protected void onPreExecute() {

        mProgressDialog = ProgressDialog.show(Users.this, "", "Loading. Please wait...", true);
    }

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

       // your network operation

        loadFeed();

      return (null);
    }


    public void loadFeed(){

        try{

            BaseFeedParser parser = new BaseFeedParser();
            messages = parser.parse();
              Log.e("check=","yes");
              List<String> titles = new ArrayList<String>(messages.size());
              HashMap<String, String> map = new HashMap<String, String>();


              int count=0;
              for (com.example.firstapp.Message msg : messages){
                    count++;
              }

               fillUsers = new ArrayList<String>(count);
               fillemail = new ArrayList<String>(count);
               fillphone = new ArrayList<String>(count);
               fillplace = new ArrayList<String>(count);

            for (com.example.firstapp.Message msg : messages){


                fillUsers.add(msg.getFname()+" "+msg.getLname());
                fillemail.add(msg.getEmail());
                fillphone.add(msg.getPhone());
                fillplace.add(msg.getPlace());

                System.out.println("OOOOOOOOOOOO "+fillemail.toString());



              }
                return;
            } catch (Throwable t){
            Log.e("AndroidNews",t.getMessage(),t);

            t.printStackTrace();
        }

    }

}   

}

4

3 回答 3

1

您可以使用Intent解析 XML 并将解析的信息传递给下一个 Activity 。

例如,

Intent mIntent = new Intent(currentActivity.this, SecondActivity.class);
mIntent.putExtra("UserName","Color");
startActivity(mIntent);

根据您提供的信息,我认为这些信息绰绰有余。

更新:

根据代码,我建议您以下几点:

  1. 为什么要创建不同的列表,在这里我会说在插入/删除数据时很难管理,假设我想删除一条记录,现在根据您的代码,您必须从每个列表中删除,对吗?是的。因此,您可以在列表中创建添加对象,而不是创建不同的列表,例如ArrayList<Student>

  2. 现在,重点在于传递动态数据(您的话),如果您遵循第一点,那么您可以直接将整个对象传递给第二个活动或您想要的任何其他地方。仅供参考,您可以通过单击位置从 ArrayList 中获取单击对象。

于 2012-11-23T06:19:03.517 回答
0

有两种方法可以做到这一点。

1) 创建一个带有静态变量的 pojo 类,并在您的下一个活动中使用它们。

public class MyClass{
 public static  String varaible1;
 public static  String varaible2;
 public static  int varaible3;
 public static  List myList;
}

2)创建自己的应用程序类

public class MyApplication extends Application {

 private  String varaible1;
 private String varaible2;
 private int varaible3;
 private List myList;
 publid getter, setter methods
}

在您的活动中使用

MyApplication  myApplication =(MyApplication)getApplication();

myApplication.getVaraible1();

在 AndroidManifest.xml 中

<application android:icon="@drawable/icon" android:label="@string/app_name"  
         android:name="MyApplication">
于 2012-11-23T07:12:05.297 回答
0

把下面的代码放在 onItemClickListener..

Intent i = new Intent(YourActivity.this,NextActivity.class);
i.putExtra("name", "Name");
i.putExtra("email", "Email");
i.putExtra("address", "Address");
startActivity(i);
于 2012-11-23T06:23:02.337 回答