Java ListView未填充数据

Java ListView未填充数据,java,android,listview,hashmap,Java,Android,Listview,Hashmap,在此应用程序中,数据插入到edittext中。然后,按enter键时,应用程序将检查插入的数据是否存在于文本文件中。如果是,文本文件中的信息将被拆分并添加到listview中 主操作正常,但listview中没有填充数据 我尝试将listView.setAdapter(adapter)从onCreate方法更改为enterKey侦听器内部。当我这样做时,listview被填充,但总是使用相同的数据 public class Main4Activity extends AppCompatActiv

在此应用程序中,数据插入到edittext中。然后,按enter键时,应用程序将检查插入的数据是否存在于文本文件中。如果是,文本文件中的信息将被拆分并添加到listview中

主操作正常,但listview中没有填充数据

我尝试将
listView.setAdapter(adapter)
onCreate
方法更改为
enterKey
侦听器内部。当我这样做时,listview被填充,但总是使用相同的数据

public class Main4Activity extends AppCompatActivity{

    private static final String TAG = "Main4Activity";

    ListView listView;

    Boolean scanOpenStatus;

    EditText editText4;

    SimpleAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        editText4 = (EditText) findViewById(R.id.editTextCodigo);

        listView = findViewById(R.id.listViewXML);
        final List<HashMap<String, String>> listagem = new ArrayList<>();
        adapter = new SimpleAdapter(this, listagem, R.layout.layoutlist, new String[] {"Principal", "Sub"}, new int[] {R.id.textViewListViewMain, R.id.textViewListViewSub});
        final HashMap<String, String> dados = new HashMap<>();
        listView.setAdapter(adapter);
        listView.setFocusable(false);
        listView.setItemsCanFocus(false);

        editText4.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                boolean check = false;

                if ((keyCode == KeyEvent.KEYCODE_ENTER) &&
                        (event.getAction() == KeyEvent.ACTION_DOWN)) {

                    String codigoLido = editText4.getText().toString().trim();
                    editText4.setText("");

                    if (!codigoLido.equals("")) {
                        try {

                            File caminhoTxt = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/lookupscangs1.txt");

                            if (caminhoTxt.exists()) {

                                try {

                                    String line;
                                    FileReader fileReader = new FileReader(caminhoTxt);
                                    BufferedReader buffer = new BufferedReader(fileReader);

                                    while ((line = buffer.readLine()) != null) {
                                        String[] codDesc = line.split(";");
                                        String codigo = codDesc[0];
                                        String descricao = codDesc[1];

                                        if (codigo.equals(codigoLido)) {

                                            dados.put("Principal", codigoLido);
                                            dados.put("Sub", descricao);
                                            listagem.add(dados);
                                            check = true;
                                            break;
                                        }
                                    }

                                    dados.put("Principal", codigoLido);
                                    dados.put("Sub", "Código Não Cadastrado!");
                                    listagem.add(dados);
                                    check = true;
                                }

                                catch (Exception e) {
                                    Toast.makeText(getApplicationContext(), "Catch 01: " + (CharSequence) e, Toast.LENGTH_SHORT).show();

                                }

                            }

                        } catch(Exception e){
                            Toast.makeText(getApplicationContext(), "Catch 02: " + e, Toast.LENGTH_SHORT).show();
                        }
                    }
                    else {
                        Toast.makeText(getApplicationContext(), "Insira um Código!", Toast.LENGTH_SHORT).show();
                        check = false;
                    }
                }
                editText4.requestFocus();
                return check;
            }

        });

    }

}
public类Main4Activity扩展了AppCompatActivity{
私有静态最终字符串TAG=“Main4Activity”;
列表视图列表视图;
布尔扫描状态;
编辑文本编辑文本4;
SimpleAdapter适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
editText4=(EditText)findViewById(R.id.editTextCodigo);
listView=findViewById(R.id.listViewXML);
最终列表列表管理=新的ArrayList();
adapter=new simpledapter(this,listagem,R.layout.layoutlist,新字符串[]{“Principal”,“Sub”},新int[]{R.id.textViewListViewMain,R.id.textViewListViewSub});
最终HashMap dados=新HashMap();
setAdapter(适配器);
setFocusable(false);
setItemsCanFocus(false);
editText4.setOnKeyListener(新视图.OnKeyListener(){
@凌驾
公共布尔onKey(视图v、int keyCode、KeyEvent事件){
布尔检查=假;
if((keyCode==KeyEvent.keyCode\u输入)&&
(event.getAction()==KeyEvent.ACTION\u DOWN)){
字符串codigoLido=editText4.getText().toString().trim();
editText4.setText(“”);
如果(!codigoLido.equals(“”){
试一试{
File caminhoTxt=新文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_下载)+“/lookupscangs1.txt”);
如果(caminhoTxt.exists()){
试一试{
弦线;
FileReader FileReader=新的FileReader(caminhoTxt);
BufferedReader buffer=新的BufferedReader(文件读取器);
而((line=buffer.readLine())!=null){
字符串[]codDesc=line.split(“;”);
字符串codigo=codDesc[0];
字符串descIcao=codDesc[1];
if(codigo.等于(codigoLido)){
护墙板放置(“主体”,codigoLido);
护墙板。放置(“Sub”,描述);
添加(护墙板);
检查=正确;
打破
}
}
护墙板放置(“主体”,codigoLido);
dados.put(“Sub”,“Código Não Cadastrado!”);
添加(护墙板);
检查=正确;
}
捕获(例外e){
Toast.makeText(getApplicationContext(),“Catch 01:”+(CharSequence)e,Toast.LENGTH_SHORT.show();
}
}
}捕获(例外e){
Toast.makeText(getApplicationContext(),“Catch 02:+e,Toast.LENGTH_SHORT).show();
}
}
否则{
Toast.makeText(getApplicationContext(),“Insira um Código!”,Toast.LENGTH_SHORT.show();
检查=错误;
}
}
editText4.requestFocus();
退货检查;
}
});
}
}

您是否尝试过使用手动更新显示器

adapter.notifyDataSetChanged();

您是否尝试过使用手动更新显示

adapter.notifyDataSetChanged();

有两种方法可以解决这个问题

adapter.notifyDataSetChanged();


在底部的try块中。

解决此问题的两种方法是添加

adapter.notifyDataSetChanged();


在底部的try块中。

是的,我找到了。没有成功。您在哪里添加了适配器。notifyDataSetChanged();电话?,你好,乔伊。我将notifyData放在onCreate块中。错了吗?@Vhox是的,错了。每次更改后数据发生更改时,您都需要将更改的数据通知适配器。更改发生在onKey事件中,而不是onCreate中。是的,我做了。没有成功。您在哪里添加了适配器。notifyDataSetChanged();电话?,你好,乔伊。我将notifyData放在onCreate块中。错了吗?@Vhox是的,错了。每次更改后数据发生更改时,您都需要将更改的数据通知适配器。更改发生在onKey事件中,而不是onCreate中。你好,Anand。谢谢你的回答。实际上,将适配器放在try块中是有效的!但是listview中的所有项目都变得相同。例如如果我在列表中插入“Hello”,那么“Hello”将出现在列表中。接下来,如果我插入“Hi”,而不是在列表中显示“Hello”和“Hi”,则会显示“Hi”和“Hi”。继续这个例子,接下来如果我插入“Bye”,它将显示“Bye”,“Bye”,“Bye”。我不明白为什么…你好,阿南德。谢谢你的回答。实际上,将适配器放在try块中是有效的!但是listview中的所有项目都变得相同。例如如果我在列表中插入“Hello”,那么“Hello”将出现在列表中。接下来,如果我插入“Hi”,而不是在列表中显示“Hello”和“Hi”,则会显示“Hi”和“Hi”