列表视图中的错误项目已被选中

时间:2014-01-12 07:31:40

标签: android listview

最初它显示选择了正确的项目...但重新填充列表后显示错误的项目被选中...请帮我找到错误

最初列表填充在onCreate()中 并在onOptionsItemSelected(MenuItem item)

中重新填充
public class MainActivity extends Activity {

    MyListActivity adapter;
    ListView list;

    String[] web = {
            "jerry",
            "walters"
    } ;
    Integer[] imageId = {
            R.drawable.ic_launcher,
            R.drawable.ic_launcher      
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        adapter = new MyListActivity(MainActivity.this, web, imageId);
        list=(ListView)findViewById(R.id.listView1);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {

            case R.id.action_settings:
                String[] web2 = {
                        "walters",
                        "jerry"
                } ;
                adapter = new MyListActivity(MainActivity.this, web2, imageId);
                list.setAdapter(adapter);
                return true;
        }
        return false;
    }

}

3 个答案:

答案 0 :(得分:0)

您没有更新您的网络阵列:

public class MainActivity extends Activity {

    MyListActivity adapter;
    ListView list;

    String[] web = {
            "jerry",
            "walters"
    } ;
    Integer[] imageId = {
            R.drawable.ic_launcher,
            R.drawable.ic_launcher      
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        adapter = new MyListActivity(MainActivity.this, web, imageId);
        list=(ListView)findViewById(R.id.listView1);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                Toast.makeText(MainActivity.this, "You Clicked at " +web[position], Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {

            case R.id.action_settings:
                web = {//<--------------just update we array as well
                        "walters",
                        "jerry"
                } ;
                adapter = new MyListActivity(MainActivity.this, web, imageId);
                list.setAdapter(adapter);
                return true;
        }
        return false;
    }
}

答案 1 :(得分:0)

你有这个

 web[position]
 // get string from  web string array not from web2 based on position

位置是指数。

web[0] = "jerry"
web[1] ="walters"

您正在使用其他数组重新填充列表视图。

webweb2是两个不同的数组。

如果要更新,请更新Web阵列并调用适配器上的notifyDataSetChanged以刷新listview

答案 2 :(得分:0)

我想这可能是因为web和web2有不同的顺序导致不同的答案?

    String[] web = { "jerry", "walters"} ; 

    String[] web2 = {"walters", "jerry" } ;