如何将ArrayAdapter与Parcelables结合使用?
我想用ListView
,ArrayAdapter
和Parcelable
构建一个简单的例子。如何将ArrayAdapter与Parcelables结合使用?
在我的示例中,有第1个Activity
,其中用户键入他的姓名,地址和国家。然后将这些数据分组并发送到第二个Activity
。 (我知道我不需要包裹发送数据,但我真的想练一个非常简单的例子parceling的这一数额)
二号Activity
的数据呈现在使用的ArrayAdapter
一个List
。
我修改了一遍又一遍的代码,尝试了各种示例,但仍然无法弄清楚我的代码出了什么问题。有人可以帮我吗?
下面是代码:
主要活动:
package com.example.marcelshimabukuro.treino_lista_inflater_adapter_bean;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.ArrayList;
public class MainActivity extends ActionBarActivity {
public Context mContext;
public EditText etNome, etEndereco, etPais;
public Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
loadComponents();
loadDadosDeUsuario();
loadButtonActions();
}
private void loadComponents() {
mButton = (Button) findViewById(R.id.btActivity2);
etNome = (EditText) findViewById(R.id.etNome1);
etEndereco = (EditText) findViewById(R.id.etEndereco1);
etPais = (EditText) findViewById(R.id.etPais1);
}
public Usuarios[] loadDadosDeUsuario() {
Usuarios[] usuariosArray = new Usuarios[3];
for (int i = 0; i < 3; i++) {
Usuarios usuarios = new Usuarios();
//Pegar dados que usuario digitar no TextView e jogar no Array
usuarios.setNome(etNome.getText().toString());
usuarios.setEndereço(etEndereco.getText().toString());
usuarios.setPais(etPais.getText().toString());
usuariosArray[i] = usuarios;
}
return usuariosArray;
}
private void loadButtonActions() {
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Mandar dados com Intent para outra actitivy
//Instanciar var Intent
Intent intent = new Intent(mContext, ListaActivity.class);
//Colocar os extras no meu intent para mandar oara a proxima activity
intent.putExtra("dadosdeusuario", loadDadosDeUsuario());
//Iniciar nova activity
startActivity(intent);
}
});
}
}
用户活动:
package com.example.marcelshimabukuro.treino_lista_inflater_adapter_bean;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Created by marcelshimabukuro on 7/25/15.
*/
//Classe Usuario para conter a minha estrutura de dados
public class Usuarios implements Parcelable {
public String mNome, mEndereço, mPais;
//Constructor
public Usuarios() {
}
public String getNome() {
return mNome;
}
public void setNome(String nome) {
mNome = nome;
}
public String getEndereço() {
return mEndereço;
}
public void setEndereço(String endereço) {
mEndereço = endereço;
}
public String getPais() {
return mPais;
}
public void setPais(String pais) {
mPais = pais;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mNome);
dest.writeString(mEndereço);
dest.writeString(mPais);
}
public static final Creator<Usuarios> CREATOR = new Creator<Usuarios>() {
@Override
public Usuarios createFromParcel(Parcel in) {
return new Usuarios(in);
}
@Override
public Usuarios[] newArray(int size) {
return new Usuarios[size];
}
};
protected Usuarios(Parcel in) {
mNome = in.readString();
mEndereço = in.readString();
mPais = in.readString();
}
}
LIST活动:
package com.example.marcelshimabukuro.treino_lista_inflater_adapter_bean;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Parcelable;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
public class ListaActivity extends ListActivity {
public Context mContext;
public ListView mListView;
public Usuarios[] mUsuariosArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista);
mContext = this;
loadComponents();
loadList();
loadAdapter();
}
private void loadComponents() {
mListView = (ListView) findViewById(R.id.lvLista3);
}
private void loadList() {
Intent intent = getIntent();
Parcelable[] parcelables = intent.getParcelableArrayExtra("dadosdeusuario");
mUsuariosArray = Arrays.copyOf(parcelables, parcelables.length, Usuarios[].class);
}
private void loadAdapter() {
ArrayList<Usuarios> usuariosArrayList = new ArrayList<Usuarios>();
//Declarar var adapter
ArrayAdapter adapter = new ArrayAdapter(this, usuariosArrayList);
//Iniciar meu adapter
mListView.setAdapter(adapter);
}
}
适配器活动:
package com.example.marcelshimabukuro.treino_lista_inflater_adapter_bean;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by marcelshimabukuro on 8/15/15.
*/
public class ArrayAdapter extends android.widget.ArrayAdapter<Usuarios> {
public TextView mNome, mEndereço, mPais;
//Constructor
public ArrayAdapter(Context context, ArrayList<Usuarios> usuariosArrayList) {
super(context,0 , usuariosArrayList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Pegar dado de cada item nesta posição
Usuarios usuarios = getItem(position);
//Se nenhuma view ja foi inflada
if (convertView == null) {
//Inflar a lista usando meu layout de itens
convertView = LayoutInflater.from(getContext()).inflate(R.layout.itens_de_lista, parent, false);
}
//Casting de meus objs de tela atrave da var converView
mNome = (TextView) convertView.findViewById(R.id.tvNome);
mEndereço = (TextView) convertView.findViewById(R.id.tvEndereço);
mPais = (TextView) convertView.findViewById(R.id.tvPais);
//o TextView da minha lista sera = ao valor da var String correspondente da classe Usuarios
mNome.setText(usuarios.mNome);
mEndereço.setText(usuarios.mEndereço);
mPais.setText(usuarios.mPais);
return convertView;
}
}
在ListActivity
,您存储数据从MainActivity
在实例变量mUsuariosArray
接受,但你不使用mUsuariosArray
在创建适配器。相反,您正在使用一个空的数组列表。
ArrayAdapter adapter = new ArrayAdapter(this, usuariosArrayList);
你的代码应该是象下面这样:
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mUsuariosArray);
感谢魔杖制造商,但我试过这个,它并没有工作。我在loadDadosDeUsuario方法上做了一些改变,我想它是返回一个空数组。但即使如此,它仍然给我错误。我怀疑该应用程序在加载意图时在loadButtonActions方法中被杀死。我在那里运行了调试,并且在那里提到“parcellable data = null”。如果与它有任何关系,不要打结。我会再次发布更新的代码,下面是错误日志猫。 –
什么是你所面临的问题? –