如何为 listView 上的项目设置绝对位置?

Posted

技术标签:

【中文标题】如何为 listView 上的项目设置绝对位置?【英文标题】:How can i set absolute positions to items on a listView? 【发布时间】:2017-05-14 20:41:54 【问题描述】:

我在我的应用程序上创建了一些活动,所以我用这些活动的名称创建了一个 listView,所以我可以单击它们并打开我想要的活动(使用 setOnClickListener 方法和开关。)然后 ai 创建了一个搜索视图,所以我可以按名称过滤它们(使用 setOnQueryTextListener)。

我们以 3 个名字为例:Alfred,Beth,Bill

在“正常”列表视图中,Alfred 是 0,Beth 是 1,Bill 是 2。所以我做了这个:

switch( position )
                
                    case 0:  Intent newActivity = new Intent(telaPesquisa.this, alfred.class);
                        startActivity(newActivity);
                        break;
                    case 1:  Intent newActivityy = new Intent(telaPesquisa.this, beth.class);
                        startActivity(newActivityy);
                        break;
                    case 2:  Intent newActivity2 = new Intent(telaPesquisa.this, bill.class);
                        startActivity(newActivity2);
                        break;

当我在 searchView 中搜索“B”时,只出现了 Beth 和 Bill,没错,但现在 Beth 是 case 0,Bill 是 case 1,所以它不会打开我想要的活动。

如何设置itens 的绝对值?比如 Alfred 总是 0,Beth 总是 1,Bill awalys 2?

这是我的全部代码。

public class telaPesquisa extends Activity 


    ListView lv;
    SearchView sv;
    String[] teams=

            "Alfred",
            "Beth",
            "Bill",

    ;
    ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tela_pesquisa);
        lv=(ListView) findViewById(R.id.listView);
        sv=(SearchView) findViewById(R.id.searchView);
        adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,teams);
        lv.setAdapter(adapter);


        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) 




                //nt firstPosition = lv.getFirstVisiblePosition()+3;

                int itemPosition = position;





                // ListView Clicked item value
                String  itemValue = (String) lv.getItemAtPosition(position);

                // Show Alert
                Toast.makeText(getApplicationContext(), "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG).show();

                switch( position )
                
                    case 0:  Intent alfred = new Intent(telaPesquisa.this, alfred.class);
                        startActivity(alfred);
                        break;

                    case 1:  Intent beth = new Intent(telaPesquisa.this, beth.class);
                        startActivity(beth);
                        break;

                    case 2:  Intent bill = new Intent(telaPesquisa.this, bill.class);
                        startActivity(bill);
                        break;


            
        );






             sv.setOnQueryTextListener(new OnQueryTextListener() 
            @Override
            public boolean onQueryTextSubmit(String text) 
                // TODO Auto-generated method stub
                return false;
            
            @Override
            public boolean onQueryTextChange(String text) 






                adapter.getFilter().filter(text);



                return false;
            
        );





    


对不起我的英语

【问题讨论】:

你为什么不把你的开关从position改成itemValue?即:switch(itemValue) case : "Beth": //goToBeth; break; 首先,您最好创建一个活动并将名称传递给它。其次,如果您仍然坚持进行单独的活动,而不是根据所选名称检查位置检查 @AhmedAbidi 正是我想要的,谢谢! 【参考方案1】:

修改监听器如下:

v.setOnItemClickListener(new AdapterView.OnItemClickListener() 
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
            // ListView Clicked item value
            String  itemValue = (String) lv.getItemAtPosition(position);

            // Show Alert
            Toast.makeText(getApplicationContext(), "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG).show();

            switch( itemValue )
            
                case "alfred":  Intent alfred = new Intent(telaPesquisa.this, alfred.class);
                    startActivity(alfred);
                    break;

                case "beth":  Intent beth = new Intent(telaPesquisa.this, beth.class);
                    startActivity(beth);
                    break;

                case "bill":  Intent bill = new Intent(telaPesquisa.this, bill.class);
                    startActivity(bill);
                    break;
        
    );

【讨论】:

以上是关于如何为 listView 上的项目设置绝对位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 IntelliJ IDEA 中的所有项目设置默认项目位置?

如何为随机自定义 ListView 适配器设置按钮单击事件?

如何为 ListView 控件中的第一个 WPF RadioButton 设置 XAML,以便默认检查?

如何为绝对类型设置 TSLint

如何为以下代码设置优先级高精度位置

如何为自定义对话框设置边距?