java - 更新 ListView 时如何更新 ListView 项目位置

标签 java android listview

我创建对话框并进入给定项目列表的对话框。并且在对话框中我添加了搜索功能。当我单击项目时,它会获得正确的项目位置,但是当我搜索列表时,它不会使用数据项目更新,而是无法检索完全可单击的项目。 以下是我的代码。

public void uploadFromDirve(View vi) {
    EditText et;

    //setContentView(R.layout.list_dialog);
    // TODO Auto-generated method stub
    listDialog = new Dialog(Project_Define_Activity.this);
    listDialog.setTitle("Select Item");
    LayoutInflater li = (LayoutInflater) Project_Define_Activity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = li.inflate(R.layout.list_dialog, null, false);
    listDialog.setContentView(v); 
    listDialog.setCancelable(true);

    //there are a lot of <span id="IL_AD7" class="IL_AD">settings</span>, for dialog, <span id="IL_AD1" class="IL_AD">check</span> them all out!
    ListView list1 = (ListView) listDialog.findViewById(R.id.listview);
    adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);
    list1.setAdapter(adapter);

    et=(EditText)listDialog.findViewById(R.id.edit_Search);
    et.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            Project_Define_Activity.this.adapter.getFilter().filter(cs);
            adapter.notifyDataSetChanged();

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub                          
        }


    });

    //list1.setAdapter(new ArrayAdapter<String>(Project_Define_Activity.this,android.R.layout.simple_list_item_1,names));
    //now that the dialog is set up, it's time to <span id="IL_AD2" class="IL_AD">show</span> it

    list1.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> adapter, View arg1, final int arg2,
                long arg3) {

            // TODO Auto-generated method stub
            AlertDialog.Builder builder = new AlertDialog.Builder(Project_Define_Activity.this);
            builder.setMessage("Attach file "+arg2)
            .setPositiveButton("Attach ", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    System.out.println("OK CLICKED");
                    Log.e("Selected", names.get(arg2));
                    fileflag = 1;
                    fileindex = arg2;
                    listDialog.cancel();

                    nameOfFile.setText(names.get(arg2));
                }
            });
            builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                    listDialog.cancel();
                }
            });
            AlertDialog alert = builder.create();
            alert.setTitle("Information");
            alert.show();

        }

    });

    listDialog.show();



}

最佳答案

要更新数据,您可以通知数据集已更改-

adapter.notifyDataSetChanged();

或者另一种选择是清除您在适配器中填充的数组列表,并使用新值更新数组列表,然后将其填充回来,就像-

ArrayList<String> print_copy=new ArrayList<String();

比清除并再次分配新值

print_copy.clear();
print_copy.add(data);
print_copy.add(data);

并再次填充它。

谢谢

关于java - 更新 ListView 时如何更新 ListView 项目位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18479427/

相关文章:

java - 从android中的 ListView 获取选定的复选框文本的结构?

android - 单击Flutter ListView导航到另一个屏幕

winforms - .NET ListView 和 Windows 7

java - `final` 启用了什么样的优化?

android - 波纹效果在滑动选项卡布局中不起作用

android - 在 onTouchEvent 中,ACTION_UP 不起作用

android - broadcastReceiver 可以捕获多个广播吗?

java - 通过 SimpleWeightedGraph 的算法

java - 我可以更改持久性单元@GenerateValue 中 GenerationType 的默认(自动)值吗?

java - 为什么界面有帮助?