代码之家  ›  专栏  ›  技术社区  ›  Shabeeralimsn

在Android Studio中使用ListView时无法解析构造函数ArrayAdapter

  •  0
  • Shabeeralimsn  · 技术社区  · 9 年前

    我有一个活动Mainactivity,当按下按钮时,它将显示一个列表视图。但在

    listAdapter=新的ArrayAdapter(this, android.R.布局。simple_list_item_1,android.R.id.text1,值);

    我得到“无法解析构造函数ArrayAdapter(匿名android view.view.OnClickListener,int,int,java.lang.String)”

    我的外课是“Mainactivity”,我尝试了“Mainactivity.this”而不是“this”。但它显示“无法解析构造函数”错误。

    MainActivity类扩展了Actionbaractivity实现的TimeselectedListner

    我的代码是:

    ok.setOnClickListener(新View.OnClickListener(){

            @Override
            public void onClick(View v) {
                if(cnt.getText().toString().length() > 0 &&
                        number.getText().toString().length() > 0 &&
                        Integer.parseInt(number.getText().toString()) > 0 &&
                        Integer.parseInt(cnt.getText().toString()) > 0) {
                        number.requestFocus();
                        String[] value = new String{"hello","world"};
    
                        try {
                            temp_count = temp_count + Integer.parseInt(cnt.getText().toString());
                            count.setText(String.valueOf(temp_count));
                            temp_amt = temp_amt + (Integer.parseInt(cnt.getText().toString()) * tkt_rate);
                            amount.setText(String.valueOf(temp_amt));
    
                            ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,
                             android.R.layout.simple_list_item_1, android.R.id.text1, value);
    
                            lstView.setAdapter(listAdapter);
                            lstView.setOnItemClickListener(new OnItemClickListener() {
                                @Override
                                public void onItemClick(AdapterView<?> parent, View view,
                                                        int position, long id) {
    
                                    SparseBooleanArray checked = lstView.getCheckedItemPositions();
                                    int size = checked.size(); // number of name-value pairs in the array
                                    for (int i = 0; i < size; i++) {
                                        int key = checked.keyAt(i);
                                        boolean value = checked.get(key);
                                        if (value) {
                                            row = lstView.getChildAt(i);
                                            row.setBackgroundColor(Color.parseColor("#33B5E5"));
                                        } else {
                                            row = lstView.getChildAt(i);
                                            row.setBackgroundColor(Color.parseColor("#F0F0F0"));
                                        }
                                    }
                                }
                            });
    

    请帮助。。。

    4 回复  |  直到 9 年前
        1
  •  3
  •   Derek Fung    9 年前

    错误显示您正在 android view.View.OnClickListener 作为第一个参数。

    我知道你说你已经试过了,但你真的需要 Mainactivity.this 。如果它不工作,请发布java文件开头的代码。

    您的活动是否命名为 Mainactivity ? 记住它是区分大小写的 MainActivity ? 如果是,您必须使用 MainActivity.this

        2
  •  0
  •   Joel Min    9 年前

    我认为这是因为你的类实现了onclicklistener。所以你能试试石膏吗 this Activity ? 如以下代码所示:

    listAdapter = new ArrayAdapter((Activity)this, android.R.layout.simple_list_item_1, android.R.id.text1, value);
    
        3
  •  0
  •   Fei Zheng    9 年前

    ArrayAdapter需要 Context 作为第一个参数。你所能做的就是在你的 上下文 ,如下所示。

    1. 在“活动”中添加了一个字段, private Context mContext;
    2. 在Activity的onCreate()内部, mContext = this;
    3. 使用mContext构造ArrayAdapter, listAdapter = new ArrayAdapter(mContext, android.R.layout.simple_list_item_1, android.R.id.text1, value);
        4
  •  0
  •   Tom Sean    5 年前

    也许这会帮助你:

    listAdapter = new ArrayAdapter(MainActivity.this,
                                   android.R.layout.simple_list_item_1,
                                   android.R.id.text1,
                                   Collections.singletonList(value));