【问题标题】:How to get the position of a selected item in ListView, onItemClickListener如何在ListView,onItemClickListener中获取所选项目的位置
【发布时间】:2017-12-03 16:11:16
【问题描述】:

我正在尝试像这样获取所选项目的位置:

//more code (adapter settings etc)
List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    String selected_item= String.valueOf(adapterView.getItemAtPosition(i));
                    position=(Integer)List.getTag(); //without this line it doesn't crash
                    Toast.makeText(Main2Activity.this,"Please Log-In"+selected_item+"Thesi :"+String.valueOf(position),Toast.LENGTH_SHORT).show();
                    Intent toy = new Intent(Main2Activity.this,Main3Activity.class);
                    startActivity(toy);
                }
            });

这会导致我的应用程序崩溃

目标:我想在一个公共变量中(位置) 所选项目的位置

Logcat:

12-03 18:16:31.858 4421-4421/gr.aegean.icsd.myapplication W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView

让我提一下,我是 android studio 的新手。

【问题讨论】:

  • 请向我们展示您的日志猫
  • 您应该看到以下链接,我认为这可能会对您有所帮助。 See the link
  • 我添加了 logcat
  • 改成这个position=(Integer)view.getTag();
  • 应用仍然崩溃

标签: android listview


【解决方案1】:

我猜你有一个 ListView 想要添加监听器。在这种情况下,在 onItemClick(AdapterView adapterView, View view, int i, long l) 方法中,第三个参数 int i 持有位置。

编辑: 如果您想在另一个活动中使用 int i,最简单的方法是在 setOnItemclick 所在的同一活动中声明一个静态类变量。例如:

class MainActivity extends Activity{
    // variable accessible from anywhere in your package
    static int global_int;

    // other usual code...

    // your existing code
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String selected_item= String.valueOf(adapterView.getItemAtPosition(i));
                position=(Integer)List.getTag(); //without this line it doesn't crash
                Toast.makeText(Main2Activity.this,"Please Log-In"+selected_item+"Thesi :"+String.valueOf(position),Toast.LENGTH_SHORT).show();
                Intent toy = new Intent(Main2Activity.this,Main3Activity.class);
                startActivity(toy);

                // saving "i"
                global_int=i;
            }
        });

}

然后从代码中的任何其他位置、其他活动等,您可以像这样访问它:

int get_global_int=MainActivity.global_int;

还有其他方法,例如将其保存在 SharedPreferences 中,但这是最简单的方法。

【讨论】:

  • 确实,这很简单,我现在要做的就是将它存储到不同的变量中。感谢您的回复
  • 如何在不同的活动中使用“i”?
【解决方案2】:

试试这个它会给你选择的项目价值和它的位置。

listview.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3)
    {
        String selectedFromList =(String) (listview.getItemAtPosition(position).toString());
        Log.d("Selected: ",  selectedFromList );


       int selectedItemPosition = listview.getItemAtPosition(position));

        Log.d("Selected item position :- ", selectedItemPosition);

    }
});

并且您可以将这个项目位置存储在一个 int 变量中,参见上面修改后的代码,我将所选项目的位置存储在一个 int 变量 selectedItemPosition 中。你可以在任何你想要的地方使用这个selectedItemPosition

【讨论】:

  • 当我在日志猫上单击它时,我得到了该项目,我想存储可行的位置并尝试在不同的活动中使用它
  • 检查修改后的代码,它可以工作,希望它能解决你的问题并得到你的支持。
  • 很高兴它对你有用 Phill,是的,如果你想在这个函数的范围之外使用它,你需要将你的项目声明为全局
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 2016-08-04
  • 2021-03-10
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多