我是新的@andorid开发。请帮助我。
这是我的问题:
我创建了listview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:gravity="left|center"
android:layout_width="wrap_content"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:paddingLeft="5dp">
<TextView android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#FFFF00"
android:textIsSelectable="true">
</TextView>
<TextView android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textColor="#0099CC"
android:textIsSelectable="true">
</TextView>
本地班级声明:
public class listview_row{
TextView Text1;
TextView Text2;
public listview_row(){
Text1 = (TextView) findViewById(R.id.TextView01);
Text2 = (TextView) findViewById(R.id.TextView02);
}
}
当我从这个类创建对象时:
listview_row obListview = new listview_row();
obListview.Text1.setText(bundle.getString("first_name"));
obListview.Text2.setText(bundle.getString("last_name"));
obListview.Text1总是等于null并且nullobjectexecption正在提升。我怎样才能解决这个问题。 我以为我可以在构造函数上创建textview,但我认为我错了。
PS:我想用两个textview创建Listview,我使用了android.R.layout.simple_list_item_1,我可以设法在两个活动之间传递数据没有问题。现在我尝试显示first_name | last_name @first screen listview。
有关详细信息,请参阅我的onActivityResult:
public void onActivityResult(int requestCode, int resultCode, Intent intent){
if ( resultCode == RESULT_OK ){
Bundle extras = intent.getExtras();
if (extras != null){
switch (requestCode){
case Activity_New:
add_new_row( extras );
break;
case Activity_Edit:
edit_row( extras );
break;
}}
}
}
这是add_new_row: public void add_new_row(Bundle bundle){ //Başlıkbilgilerinikayıtediyoruz int sayi = HeaderArray.size(); listview_row obListview = new listview_row(); obListview.Text1.setText(bundle.getString( “如first_name”)); obListview.Text2.setText(bundle.getString( “姓氏”));
HeaderArray.add(sayi, obListview);
HeaderAdapter.notifyDataSetChanged();
// Kalem bilgilerini kayıt ediyoruz
mtable_row obMember = new mtable_row();
obMember.index = sayi;
obMember.first_name = bundle.getString("first_name");
obMember.last_name = bundle.getString("last_name");
obMember.birth_date = bundle.getString("birth_date");
itemArray.add(sayi, obMember);
}
我用于详细信息数组:
private ArrayList<mtable_row> itemArray;
public class mtable_row{
int index;
String first_name;
String last_name;
String birth_date;
}
我的主要目标是使用两个数组: 第一个是标题,第二个是项目。 header有两个字段first_name和second_name
我喜欢在主屏幕上显示这个数组。
答案 0 :(得分:1)
要这样做,您必须通知Layout
文件以传递给您的班级并使用它来获取类似
Text1 = (TextView) layout.findViewById(R.id.TextView01);
其中layout
是您传入构造函数的膨胀layout
。我没有试过这个,但这样的事情可能会奏效。但是,除非您需要这样做,否则将这些Views
保留在Activitvy
public class YourActivity extends Activity {
TextViw Text1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
Text1 = (TextView) findViewById(R.id.TextView01);
Text2 = (TextView) findViewById(R.id.TextView02);
.....
}
}
您收到的是NPE
,因为据我所知,您还没有夸大这些layout
存在的Views
文件。
另外,这是一件小事,但你应该考虑坚持Java naming conventions不要混淆或混淆他人。类名应该是驼峰式的,变量名应该是大小写混合的。
答案 1 :(得分:0)
我想用两个textview创建Listview,
为此我建议你有一个自定义列表视图。定义了自定义适配器。为每行充气自定义布局。
您可以将值传递给CustomAdapter的构造函数。
CustomAdapter cus = new CustomAdapter(this);
ListView lv= (ListView) findViewById(R.id.lv);
lv.setAdapter(cus);
public class CustomAdapter extends ArrayAdapter {
Context c;
LayoutInfator mInflater;
public CustomAdapter(CustomListView customListView) {
super(customListView, 0);
// TODO Auto-generated constructor stub
this.mInflater = LayoutInflater.from(customListView);
c=customListView;
}
public int getCount() {
return 20; //listview item count
}
public Object getItem(int arg0) {
return arg0;
}
public long getItemId(int arg0) {
return arg0;
}
public View getView(final int arg0, View arg1, ViewGroup arg2) {
final ViewHolder vh;
vh= new ViewHolder();
if(arg1==null )
{
arg1=mInflater.inflate(R.layout.customlayout, arg2,false);
vh.tv1= (TextView)arg1.findViewById(R.id.textView1);
vh.tv2= (TextView)arg1.findViewById(R.id.textView2);
}
else
{
arg1.setTag(vh);
}
vh.tv1.setText("hello");
vh.tv2.setText("hello");
return arg1;
}
static class ViewHolder
{
TextView tv1,tv2;
}
}
在两个活动之间传递数据后,在第二个活动中检索数据。每个屏幕都有自己的UI。你不能像你所做的那样引用UI元素。
为您的第二项活动提供两个TextView
public class SecondActivity extends Activity{
TextView tv1;
TextView tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
tv1 = (TextView) findViewById(R.id.TextView01);
tv2 = (TextView) findViewById(R.id.TextView02);
Bundle extras = getIntent().getExtras();
if (extras != null) {
tv1.setText(extras.getString("first_name"));
tv2.setText(extras.getString("last_name"));
}
}
}