0

我是新的@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ık bilgilerini kayıt ediyoruz int sayi = HeaderArray.size(); listview_row obListview = new listview_row(); obListview.Text1.setText(bundle.getString("first_name")); obListview.Text2.setText(bundle.getString("last_name"));

    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;
}

我的主要目标是使用两个数组:第一个是标题,第二个是项目。标头有两个字段 first_name 和 second_name

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

4

2 回答 2

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 命名约定,以免混淆或混淆其他人。类名应该是驼峰式,变量名应该是大小写混合。

于 2013-04-02T15:25:41.003 回答
0

我想用两个文本视图创建 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"));   
    }

   }
 }
于 2013-04-02T15:26:41.620 回答