构造函数ArrayAdapter <string>(AddNewUnit,int,String)未定义</string>

时间:2013-07-15 04:21:25

标签: android android-arrayadapter android-context

我是Android和Java的新手,我遇到了这个问题而且我找不到答案,但我找不到任何东西。

我正在尝试从数据库中获取一些数据并将其放在微调器中,但我遇到了这个问题:

构造函数ArrayAdapter(AddNewUnit,int,String)未定义

这是我的代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;

public class AddNewUnit extends Activity implements OnItemSelectedListener {

EditText UnitName;
Spinner BookName;
DataBase dataBase;
String[][] Books;
String BookId;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_new_unit);
    UnitName = (EditText) findViewById(R.id.ANU_EtUnitName);
    BookName = (Spinner) findViewById(R.id.ANU_SBookName);
    dataBase.open();
    Books = dataBase.Get_Books();
    dataBase.close();
    ArrayAdapter<String> adapter =new ArrayAdapter<String>(AddNewUnit.this, android.R.layout.simple_spinner_item, Books[1][]);
    BookName.setAdapter(adapter);
    BookName.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    // TODO Auto-generated method stub
    BookId=Books[0][BookName.getSelectedItemPosition()];
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub

}


}

我的问题在于这一行

ArrayAdapter<String> adapter =new ArrayAdapter<String>(AddNewUnit.this, android.R.layout.simple_spinner_item, Books[1][]);

我搜索并发现大多数错误都是在他们写this的情况下使用上下文,但是我写了AddNewUnit.this这是我的活动。

我做错了什么?


更多详情:

对不起,这是第一次使用java之前我在c ++中使用过c ++我使用Books[1][]将数组从多维转换为单维,它只是从数组得到第1行。< / p>

这个字符串有两行一个用于Book ID,另一个用于Book name我只想传递Book名称,即第1行。

有没有办法做到这一点,或者我必须使用自定义ArrayAdapter

4 个答案:

答案 0 :(得分:1)

使用的构造函数未定义。

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

在API级别1中添加

构造

参数

context The current context.

resource    The resource ID for a layout file containing a layout to use when instantiating views.

textViewResourceId  The id of the TextView within the layout resource to be populated

objects The objects to represent in the ListView.

http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter(android.content.Context,int,T [])

你有这个

 ArrayAdapter<String> adapter =new ArrayAdapter<String>(AddNewUnit.this, android.R.layout.simple_spinner_item, Books[1][]);  // params wrong

将自定义列表视图与自定义适配器以及视图持有者一起使用。

覆盖getCountgetView

How to Display two dimensional Array in ListView?

答案 1 :(得分:0)

我认为你必须custom adapter使用Books[1][]因为它的多维度! 因此,请使用custom Adapter覆盖 getView()

答案 2 :(得分:0)

ArrayAdapter<String> adapter =new ArrayAdapter<String>(AddNewUnit.this, android.R.layout.simple_spinner_item, Books[1][]);

ArrayAdapter没有任何接收2D数组的构造函数。尝试扩展BaseAdapter并创建自己的自定义适配器。

public class YourCustomAdapter extends BaseAdapter{

String[][] your2Darray;

//Here's your constructor
public YourCustomAdapter(Context c,int layoutId,int resourceId, String[][] you2Darray){
        this.your2Darray=your2Darray;
....
      }
}....

覆盖getCount()getView()

答案 3 :(得分:-1)

您已将T类型设置为字符串,然后传递Book类型对象的集合,您需要将字符串更改为&#34;您的数据类&#34;