gpt4 book ai didi

android - 无法从另一个 Activity 更新 ListView

转载 作者:行者123 更新时间:2023-11-30 03:21:31 25 4
gpt4 key购买 nike

我有一个包含搜索栏和搜索 Activity 的主要 Activity 。当我在搜索栏中输入一个字符串并按回车键时,将调用搜索 Activity 。我正在尝试从搜索 Activity 更新主 Activity 中的 ListView ,但这不起作用。怎么了?谢谢

public class MainActivity extends Activity {
static List<String> valueList;


@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

valueList = new ArrayList<String>();

MainActivity.valueList.add("eins");
MainActivity.valueList.add("zwei");
MainActivity.valueList.add("drei");
MainActivity.valueList.add("vier");
MainActivity.valueList.add("fünf");
MainActivity.valueList.add("sechs");

ListAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, MainActivity.valueList);

final ListView lv = (ListView)findViewById(R.id.listView1);

lv.setAdapter(adapter);

lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{ }
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);

return true;
}

public class SearchableActivity extends Activity {
ListView lv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_searchable);

android.util.Log.v("my_search", "onCreate()");
handleIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
android.util.Log.v("my_search", "onNewIntent()");
handleIntent(intent);
}

private void handleIntent(Intent intent) {

if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);

android.util.Log.v("my_search", "handleIntent()");
android.util.Log.v("my_search", "Query: "+query);

TextView tv;
tv=(TextView) findViewById(R.id.textview_searchable);
tv.setText("Suche nach: "+query);
doMySearch(query);
}
}

public void doMySearch(String query)
{
List<String> valueList_new = new ArrayList<String>();

for(String s : MainActivity.valueList) {
if(s.contains(query)) {
android.util.Log.v("my_search", "gefunden: "+s);
valueList_new.add(s);
}
}

setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);

ArrayAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, valueList_new);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();

finish();
}

最佳答案

我确信这个选项不是最好的方法,但我曾经解决过它。尝试在 MainActivity 中保留一个属性(public static List),其中包含您要显示的值。

现在,每次 Activity 进入前台时设置你的 apadter:

@Override
public void onResume(){

adapter = new ExpandListAdapter(MainActivity.this, valueList);
lv.setAdapter(adapter);
super.onResume();
}

因此您只需从 SearchableActivity 编辑您的 valueList,ListView 将自动更新。

如果您不喜欢公共(public)属性,您可以实现一个包含Protected static List 的superActivity。这两个 Activity 都应该从 super 继承。

但是无论如何,您不能直接从 MainActivity 内部处理 Intent 吗?

关于android - 无法从另一个 Activity 更新 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19049095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com