我正在构建一个非常基本的应用程序:我有一个列表,一旦单击列表中的某个项目,就会出现一个警报对话框,其中包含有关该单击项目的更多信息。
我实现了过滤器搜索功能,并且运行良好,但是存在一个大问题:假设您在搜索栏“ 1”上输入文字,然后屏幕上所有以1开头的项目都出现在屏幕上,因此:1、11、12、13、13 14、15等
单击新列表的第二项后,您将不会得到R.layout.11
,但是您基本上会得到R.layout.2
,因为代码会将11识别为ID == 1的列表的第二项,而不是将11识别为ID的第11个项。 id == 12。
显然,它不仅与第二项有关,而且与过滤列表中的所有项目有关。有人可以帮我解决这个问题吗?您对解决方法有任何想法吗?
我对Android应用程序开发非常陌生,对Java知之甚少,我只是在学习,感谢您的耐心等待。
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_max);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_max);
final String[] nameproducts = new String[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
// ArrayList
final ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < nameproducts.length; ++i) {
list.add(nameproducts[i]);
}
final ListView mylist = (ListView) findViewById(R.id.listView1);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
sv=(SearchView) findViewById(R.id.searchView1);
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String text) {
return false;
}
@Override
public boolean onQueryTextChange(String text) {
adapter.getFilter().filter(text);
return false;
}
});
mylist.setAdapter(adapter);
mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> testo, View v, int pos, long id) {
if (id == 0) {
AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this);
builder.setCancelable(true);
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.1, null);
builder.setView(view);
builder.show();
}
if (id == 1) {
AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this);
builder.setCancelable(true);
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.2, null);
builder.setView(view);
builder.show();
}
if (id == 2) {
AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this);
builder.setCancelable(true);
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.3, null);
builder.setView(view);
builder.show();
}
}
});
}
最佳答案
如何查看所点击项目的值而不是ID。这有效:
@Override
public void onItemClick(AdapterView<?> test, View v, int pos, long id) {
String num = test.getItemAtPosition((int)id).toString();
if (num.equalsIgnoreCase("11")) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setCancelable(true);
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.eleven, null);
builder.setView(view);
builder.show();
}
else if (num.equalsIgnoreCase("12")) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setCancelable(true);
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.twelve, null);
builder.setView(view);
builder.show();
}