首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从其他活动更新ListView

无法从其他活动更新ListView
EN

Stack Overflow用户
提问于 2013-09-27 19:00:17
回答 3查看 2K关注 0票数 1

我有一个main-activity,它包含一个搜索栏和一个search-activity。当我在搜索栏中输入一个字符串并按回车键时,搜索活动就会被调用。我正在尝试从搜索活动中更新main-activity中的listview,但这不起作用。怎么了?thx

代码语言:javascript
复制
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;
}

}

代码语言:javascript
复制
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();
}

}

EN

回答 3

Stack Overflow用户

发布于 2013-09-27 19:41:58

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

现在,在每次活动进入前台时设置您的apadter:

代码语言:javascript
复制
@Override
public void onResume(){

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

所以你只需要在SearchableActivity中编辑你的valueList,ListView就会自动更新。

如果你不喜欢公共属性,你可以实现一个包含Protected static List的superActivity。这两个活动都应该从超级节点继承。

但不管怎样,您不能直接从MainActivity内部处理意图吗?

票数 1
EN

Stack Overflow用户

发布于 2013-09-27 19:14:35

试一下这段代码

代码语言:javascript
复制
public void doMySearch(String query)
                {
                    List<String> valueList_new = new ArrayList<String>();

                    for (int i = 0; i < MainActivity.valueList.size(); i++) {
                        if((valueList.get(i).contains(query)))
                        {
                             valueList_new.add(valueList.get(i));
                        }
                    }
                        }
票数 0
EN

Stack Overflow用户

发布于 2014-06-27 17:16:43

您不能通过新建另一个适配器来更新列表视图。

listview只有1个适配器,这是第一次为ListView设置dapter。

要更新列表视图,您需要更新适配器的数据。

参考:Update ListView items from another class

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19049095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档