AutoCompleteTextView OnItemClickListener不起作用

时间:2016-09-29 18:24:43

标签: android autocompletetextview

我今天有一个具体问题,我在谷歌搜索但找不到任何可能有用的答案。

我的活动有一个AsyncTask,它从数据库加载一些字符串并在autocompletetextview中显示它们。我使用HttpUrlConnection获取字符串,然后使用json-simple库解析它们,然后在autocompletetextview中显示它们。这是ACTV的整个代码,它位于onPostExecute():

ArrayList<Object> result = new ArrayList<>();
for (Shift_OneTime sot : shifts) {
     result.add(sot.getName() + " " + sot.getDay() + " " + sot.getMonth() + " " + sot.getYear());
     }
     for (Employee e : emps) {
         result.add(e.toString());
     }

     acs = (AutoCompleteTextView) findViewById(R.id.autocompletesearch);

     ArrayAdapter<Object> adapter = new ArrayAdapter<>(MainScreen.this, android.R.layout.simple_list_item_1, result);
     acs.setAdapter(adapter);
     acs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
               acs.setText("");
               acs.clearFocus();
               Object o = adapterView.getItemAtPosition(i);
               if (o instanceof Employee) {
                  Intent n = new Intent(MainScreen.this, EmployeeDetailsActivity.class);
                  n.putExtra("employeeid", ((Employee) o).getId());
                  startActivity(n);
                } else if (o instanceof Shift_OneTime) {
                  Intent n = new Intent(MainScreen.this, ShiftDetailsActivity.class);
                  n.putExtra("shiftid", ((Shift_OneTime) o).getId());
                  startActivity(n);
                }
           }
      });

我得到了一堆警告:

W/IInputConnectionWrapper: getSelectedText on inactive InputConnection
W/IInputConnectionWrapper: requestCursorAnchorInfo on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection

当我点击在autocompletetextview中输入内容后显示的字符串时,会出现这些错误。现在我的观察结果并不确定,但上次工作时我正在使用旧的DefaultHTTPClient或现在已弃用的任何东西。这就是我改为HttpURLConnection的原因。在这个改变之后,我还将ACTV移动到AsyncTask,因为我正在从我的php webservice读取字符串,我还添加了ActionBarDrawerToggle并覆盖了它的方法,以便在我打开导航抽屉时隐藏软键盘。

我尝试删除扩展切换,我也尝试将onItemClickListener()放回AsyncTask之外,但它没有帮助。我现在真的不能回到已弃用的HTTP客户端,所以我想知道是否有任何想法...非常感谢

3 个答案:

答案 0 :(得分:0)

您需要使用setOnClickListener();

答案 1 :(得分:0)

我没注意到的问题是Object o = adapterView.getItemAtPosition(i);正在获取String类型的对象(注意我填充的方式&#39;结果&#39;列表),既不是Employee的对象也不是Shift_OneTime。因此,当我检查了XXX&#39; o的实例时,它既不是一个也不是其他的。因此,我不必用字符串填充列表,而是必须自己插入对象,f.e。: 之前:

result.add(sot.getName() + .... );

后:

result.add(e);

使用Employee和Shift_OneTime类中的toString()方法中的值来搜索ACTV中的字符。

希望这将有助于将来的人。

答案 2 :(得分:0)

我尝试过很多东西,但我找到了这个解决方案

当Onclicklistener没有处理我的代码时,我做了这个解决方案

将Onclicklistener放入getView()中的自定义适配器中。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final Customer customer = getItem(position);
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.customer_row, parent, false);
        }
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(yourContext, "text clicked", Toast.LENGTH_SHORT).show();
            }
        });

//....do your stuff here 

        return convertView;
    }