我今天有一个具体问题,我在谷歌搜索但找不到任何可能有用的答案。
我的活动有一个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客户端,所以我想知道是否有任何想法...非常感谢
答案 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;
}