ListView不显示项目上的文本(ListView not showing text on items)

编程入门 行业动态 更新时间:2024-10-27 17:22:14
ListView不显示项目上的文本(ListView not showing text on items)

我想显示来自editText的文本输入并使用ArrayAdapter在listView中显示它,当单击按钮时,listView确实获得了一个项目,但是没有文本:

这是代码:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.blink.blink.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="61dp"> <EditText android:layout_width="280dp" android:layout_height="60dp" android:hint="Type a quote .. " android:id="@+id/quoteField" /> <Button android:layout_width="wrap_content" android:layout_height="60dp" android:text="Add Quote" android:id="@+id/addQuote" android:fontFamily="sans-serif-condensed" android:background="#f6546a" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/quoteField" /> </RelativeLayout> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/quotelistView" android:foreground="#f6546a"/> </LinearLayout>

并且:

public class MainActivity extends AppCompatActivity { Button createBtn ; EditText quoteField; ListView quotesListView; ArrayList<String> quotesArrayList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createBtn = (Button) findViewById(R.id.addQuote); quoteField = (EditText) findViewById(R.id.quoteField); quotesListView = (ListView) findViewById(R.id.quotelistView); quotesArrayList = new ArrayList<>(); createBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { quotesArrayList.add(quoteField.getText().toString()); SetAdapter(); quoteField.setText(" "); } }); } private void SetAdapter() { ArrayAdapter<String> Adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, quotesArrayList); quotesListView.setAdapter(Adapter); } }

I want to display text input from an editText and show it in a listView using an ArrayAdapter, when clicking a button, the listView does gets an item added but without the text :

here is the code:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.blink.blink.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="61dp"> <EditText android:layout_width="280dp" android:layout_height="60dp" android:hint="Type a quote .. " android:id="@+id/quoteField" /> <Button android:layout_width="wrap_content" android:layout_height="60dp" android:text="Add Quote" android:id="@+id/addQuote" android:fontFamily="sans-serif-condensed" android:background="#f6546a" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/quoteField" /> </RelativeLayout> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/quotelistView" android:foreground="#f6546a"/> </LinearLayout>

and :

public class MainActivity extends AppCompatActivity { Button createBtn ; EditText quoteField; ListView quotesListView; ArrayList<String> quotesArrayList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createBtn = (Button) findViewById(R.id.addQuote); quoteField = (EditText) findViewById(R.id.quoteField); quotesListView = (ListView) findViewById(R.id.quotelistView); quotesArrayList = new ArrayList<>(); createBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { quotesArrayList.add(quoteField.getText().toString()); SetAdapter(); quoteField.setText(" "); } }); } private void SetAdapter() { ArrayAdapter<String> Adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, quotesArrayList); quotesListView.setAdapter(Adapter); } }

最满意答案

每次更改阵列中的数据时都不需要重置适配器。 你应该做的是保持对适配器的引用,并在更改列表中的数据时调用adapter.notifyDataSetChanged()

public class MainActivity extends AppCompatActivity { Button createBtn ; EditText quoteField; ListView quotesListView; ArrayList<String> quotesArrayList; ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createBtn = (Button) findViewById(R.id.addQuote); quoteField = (EditText) findViewById(R.id.quoteField); quotesListView = (ListView) findViewById(R.id.quotelistView); quotesArrayList = new ArrayList<>(); adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, quotesArrayList); quotesListView.setAdapter(adapter); createBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { quotesArrayList.add(quoteField.getText().toString()); adapter.notifyDataSetChanged(); quoteField.setText(" "); } }); } }

You do not need to reset the adapter everytime you change the data in the array. What you should do is keep a reference to the adapter and call adapter.notifyDataSetChanged() when you change the data in the list

public class MainActivity extends AppCompatActivity { Button createBtn ; EditText quoteField; ListView quotesListView; ArrayList<String> quotesArrayList; ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createBtn = (Button) findViewById(R.id.addQuote); quoteField = (EditText) findViewById(R.id.quoteField); quotesListView = (ListView) findViewById(R.id.quotelistView); quotesArrayList = new ArrayList<>(); adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, quotesArrayList); quotesListView.setAdapter(adapter); createBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { quotesArrayList.add(quoteField.getText().toString()); adapter.notifyDataSetChanged(); quoteField.setText(" "); } }); } }

更多推荐

本文发布于:2023-08-06 05:19:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1444620.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文本   项目   ListView   items   text

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!