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(" "); } }); } }更多推荐
发布评论