在构造函数上创建的Android Local公共类textview

时间:2013-04-02 15:17:54

标签: android constructor android-listview textview

我是新的@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

我喜欢在主屏幕上显示这个数组。

2 个答案:

答案 0 :(得分:1)

要这样做,您必须通知Layout文件以传递给您的班级并使用它来获取类似

的ID
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"));   
    }

   }
 }