更新 ListView 中的适配器 android
updating adapter in ListView android
我在尝试更新 Android 中的 listView 时遇到适配器问题。我已经在堆栈上解决了类似的问题,但仍然没有弄清楚。
我正在开发一种遗愿清单应用程序,我开始一个新的 activity 以便将愿望添加到愿望清单中。它只是一个用于研究目的的原型,我尝试在没有异步解决方案的情况下制作它,仅使用 adapter.add("user inserted wish"),但应用程序只是崩溃,或者甚至无法启动。我提到我已经检查了发送消息的 activity 的功能(我只是简单地显示了它,您可以在 onActivityResult 上看到)。下面提供的示例代码也有效,因为我已经评论了问题代码,但没有向 listView 添加任何内容。
那么为什么我假设它不起作用(如果我使用注释代码):如果我将我的适配器声明在 onCreate 中,它就不会在 onActivityResult 中可见,我无法在此处使用添加方法,也无法使用适配器,如果我在其外部声明我的适配器,则 crashes/doesn 无法启动应用程序.
package com.example.packagename.reforgedbucketlist;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import static com.example.beatriceghetel.reforgedbucketlist.R.styleable.View;
public class MainActivity extends AppCompatActivity {
public String logMsg = "State";
String[] wishesArray = {"Preset wish: use this app!","Preset wish: enjoy this app!","Preset wish: rate this app!","Preset wish: recommend this app!"};
/*ArrayAdapter adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, wishesArray);
ListView listView = (ListView) findViewById(R.id.wishes_list);*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, wishesArray);
ListView listView = (ListView) findViewById(R.id.wishes_list);
listView.setAdapter(adapter);
Log.d(logMsg, "The onCreate() event");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_items, menu);
MenuItem item1 = (MenuItem) findViewById(R.id.about_id);
MenuItem item2 = (MenuItem) findViewById(R.id.settings_id);
MenuItem item3 = (MenuItem) findViewById(R.id.add_wish_id);
return super.onCreateOptionsMenu(menu);
}
@Override
protected void onStart() {
super.onStart();
Log.d(logMsg, "The onStart() event");
}
@Override
protected void onResume() {
super.onResume();
Log.d(logMsg, "The onResume() event");
}
@Override
protected void onPause() {
super.onPause();
Log.d(logMsg, "The onPause() event");
}
@Override
protected void onStop() {
super.onStop();
Log.d(logMsg, "The onStop() event");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(logMsg, "The onDestroy() event");
}
public void onAddWishClick(MenuItem item) {
Intent getNewWishIntent = new Intent(this, AddWishActivity.class);
final int result = 1;
getNewWishIntent.putExtra("CallingActivity", "Wish");
startActivityForResult(getNewWishIntent, result);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
TextView userWishView = (TextView) findViewById(R.id.message_sent_back);
String wishSentBack = data.getStringExtra("UserWish");
userWishView.append(" " + wishSentBack);
//adapter.add(wishSentBack);
//adapter.notifyDataSetChanged();
}
}
问题是您使用的数组具有固定大小。
尝试将声明更改为:
public class MainActivity extends AppCompatActivity {
public String logMsg = "State";
List<String> list = new ArrayList<>();
String[] wishesArray = {"Preset wish: use this app!","Preset wish: enjoy this app!","Preset wish: rate this app!","Preset wish: recommend this app!"};
// On create ....{
list.addAll(Arrays.asList(wishesArray ));
ArrayAdapter adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, list);
//.... do the rest normally
}
以及何时需要更新数据:
list.add(wishSentBack);
adapter.notifyDataSetChanged();
我在尝试更新 Android 中的 listView 时遇到适配器问题。我已经在堆栈上解决了类似的问题,但仍然没有弄清楚。
我正在开发一种遗愿清单应用程序,我开始一个新的 activity 以便将愿望添加到愿望清单中。它只是一个用于研究目的的原型,我尝试在没有异步解决方案的情况下制作它,仅使用 adapter.add("user inserted wish"),但应用程序只是崩溃,或者甚至无法启动。我提到我已经检查了发送消息的 activity 的功能(我只是简单地显示了它,您可以在 onActivityResult 上看到)。下面提供的示例代码也有效,因为我已经评论了问题代码,但没有向 listView 添加任何内容。
那么为什么我假设它不起作用(如果我使用注释代码):如果我将我的适配器声明在 onCreate 中,它就不会在 onActivityResult 中可见,我无法在此处使用添加方法,也无法使用适配器,如果我在其外部声明我的适配器,则 crashes/doesn 无法启动应用程序.
package com.example.packagename.reforgedbucketlist;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import static com.example.beatriceghetel.reforgedbucketlist.R.styleable.View;
public class MainActivity extends AppCompatActivity {
public String logMsg = "State";
String[] wishesArray = {"Preset wish: use this app!","Preset wish: enjoy this app!","Preset wish: rate this app!","Preset wish: recommend this app!"};
/*ArrayAdapter adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, wishesArray);
ListView listView = (ListView) findViewById(R.id.wishes_list);*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, wishesArray);
ListView listView = (ListView) findViewById(R.id.wishes_list);
listView.setAdapter(adapter);
Log.d(logMsg, "The onCreate() event");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_items, menu);
MenuItem item1 = (MenuItem) findViewById(R.id.about_id);
MenuItem item2 = (MenuItem) findViewById(R.id.settings_id);
MenuItem item3 = (MenuItem) findViewById(R.id.add_wish_id);
return super.onCreateOptionsMenu(menu);
}
@Override
protected void onStart() {
super.onStart();
Log.d(logMsg, "The onStart() event");
}
@Override
protected void onResume() {
super.onResume();
Log.d(logMsg, "The onResume() event");
}
@Override
protected void onPause() {
super.onPause();
Log.d(logMsg, "The onPause() event");
}
@Override
protected void onStop() {
super.onStop();
Log.d(logMsg, "The onStop() event");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(logMsg, "The onDestroy() event");
}
public void onAddWishClick(MenuItem item) {
Intent getNewWishIntent = new Intent(this, AddWishActivity.class);
final int result = 1;
getNewWishIntent.putExtra("CallingActivity", "Wish");
startActivityForResult(getNewWishIntent, result);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
TextView userWishView = (TextView) findViewById(R.id.message_sent_back);
String wishSentBack = data.getStringExtra("UserWish");
userWishView.append(" " + wishSentBack);
//adapter.add(wishSentBack);
//adapter.notifyDataSetChanged();
}
}
问题是您使用的数组具有固定大小。
尝试将声明更改为:
public class MainActivity extends AppCompatActivity {
public String logMsg = "State";
List<String> list = new ArrayList<>();
String[] wishesArray = {"Preset wish: use this app!","Preset wish: enjoy this app!","Preset wish: rate this app!","Preset wish: recommend this app!"};
// On create ....{
list.addAll(Arrays.asList(wishesArray ));
ArrayAdapter adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, list);
//.... do the rest normally
}
以及何时需要更新数据:
list.add(wishSentBack);
adapter.notifyDataSetChanged();