1

如何从数组中添加 listView(在我的布局上)的项目?我尝试了多次,但每次我得到错误:System services not avaliable before onCreate.();。是的,我知道当我尝试访问时会显示这个 er.ror ArrayAdapter。几乎什么都试过了。.完整代码在这里:pastebin.com/Nv5BkcS7

更新

我遵循了其他一些教程。我的代码现在可以工作,但没有数据。http://pastebin.com/D8UFKC7i和 xml http://pastebin.com/mJfwjGcB 有人能告诉我为什么它不起作用吗?调试器说数组有全部

4

2 回答 2

2

您的 onCreate() 方法在 addcontacts 活动中为空白,这就是问题所在:

public class addcontacts extends ListActivity {

                 protected void onCreate() {
                      //set content here                       
                      setContentView(R.layout.activity_add_contact);
                 }
                 ...
   ...

并且不要忘记在 Layout 文件夹中创建 activity_add_contact.xml

内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
      android:id="@android:id/list"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" >
    </ListView>  

</LinearLayout> 
于 2013-02-12T17:54:27.970 回答
1

1.创建自定义适配器扩展BaseAdpter或ArrayAdpter并在构造函数中传递数组或ArrayList。

2.在布局中创建视图(行)

3.在自定义Adapter的getview函数中膨胀这个xml并设置数据。

活动 XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/lstText"
/>
</LinearLayout>

列表行 XML(在布局 row.xml 中)

   <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent" android:layout_height="fill_parent">
  <LinearLayout
   android:orientation="vertical"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent">

    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/txtAlertText" />

  </LinearLayout>
 </LinearLayout>

在您的活动中创建适配器类

 class JSONAdapter extends BaseAdapter implements ListAdapter {

private final Activity activity;
private final JSONArray jsonArray;
private JSONAdapter (Activity activity, JSONArray jsonArray) {
    assert activity != null;
    assert jsonArray != null;

    this.jsonArray = jsonArray;
    this.activity = activity;
}


@Override public int getCount() {
    if(null==jsonArray) 
     return 0;
    else
    return jsonArray.length();
}

@Override public JSONObject getItem(int position) {
     if(null==jsonArray) return null;
     else
       return jsonArray.optJSONObject(position);
}

@Override public long getItemId(int position) {
    JSONObject jsonObject = getItem(position);

    return jsonObject.optLong("id");
}

@Override public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null)
        convertView = activity.getLayoutInflater().inflate(R.layout.row, null);



    TextView text =(TextView)convertView.findViewById(R.id.txtAlertText);

                JSONObject json_data = getItem(position);  
                if(null!=json_data ){
                String jj=json_data.getString("f_name");
                text.setText(jj); 
               }

     return convertView;
}
 }

然后将其添加到您的活动中。

  public class main extends Activity {
/** Called when the activity is first created. */

ListView lstTest;
//Array Adapter that will hold our ArrayList and display the items on the ListView
JSONAdapter jSONAdapter ;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //Initialize ListView
    lstTest= (ListView)findViewById(R.id.lstText);


    jSONAdapter = new JSONAdapter (main.this,jArray);//jArray is your json array 

    //Set the above adapter as the adapter of choice for our list
    lstTest.setAdapter(jSONAdapter );


}

你完成了。

于 2013-02-13T15:41:13.980 回答