android– 从自定义适配器获取项目位置

android– 从自定义适配器获取项目位置,第1张

概述由于PreferenceFragment在支持库中不可用,因此我创建了一个ListFragment来向用户显示设置列表,因为我没有很多要显示的设置.我还创建了一个自定义ArrayAdapter来自定义列表项.当用户检查其中一个CheckBox时我需要处理,以便我可以保存天气或者不检查它.因此,如果检查它,它将保持检查

由于PreferenceFragment在支持库中不可用,因此我创建了一个ListFragment来向用户显示设置列表,因为我没有很多要显示的设置.我还创建了一个自定义ArrayAdapter来自定义列表项.当用户检查其中一个CheckBox时我需要处理,以便我可以保存天气或者不检查它.因此,如果检查它,它将保持检查,直到用户取消选中它.如果列表中只有一个设置,但现在有2个,我可能需要添加更多设置,这会容易得多.所以我需要能够确定检查了哪一个.我可以处理检查并取消选中,我无法找到确定检查哪一个的方法.

代码

这是我的清单项目:

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"androID:layout_wIDth="match_parent"androID:layout_height="match_parent"androID:orIEntation="vertical" ><linearLayout androID:layout_wIDth="match_parent" androID:layout_height="match_parent"                      androID:orIEntation="horizontal"><TextVIEw androID:ID="@+ID/pref_edit_text" androID:layout_wIDth="0dp" androID:layout_height="30dp"              androID:layout_weight="5"/>    <CheckBox androID:ID="@+ID/pref_check_Box" androID:layout_wIDth="0dp" androID:layout_height="wrap_content"              androID:layout_weight="1" androID:onClick="onCheckBoxClick"/>    </linearLayout><TextVIEw androID:ID="@+ID/pref_edit_text2" androID:layout_wIDth="match_parent"              androID:layout_height="50dp"/>

这是我的适配器中的getVIEw():

    @OverrIDe    public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) {        //mIntCheckBoxposition = position;        Typeface tf = Typeface.createFromAsset(mMainActivity.getAssets(), "Fonts/ArchitectsDaughter.ttf");        LayoutInflater inflater = mMainActivity.getLayoutInflater();        VIEw vIEw = inflater.inflate(mIntLayoutID, parent, false);        TextVIEw text = (TextVIEw) vIEw.findVIEwByID(R.ID.pref_edit_text);        text.setText(mStringArrayTitle[position]);        text.setTypeface(tf, Typeface.BolD);        text = (TextVIEw) vIEw.findVIEwByID(R.ID.pref_edit_text2);        text.setText(mStringArraySubTitle[position]);        text.setTypeface(tf);        mMainActivity.setTitle("Settings");        return vIEw;    }

这里是我在ListFragment中点击CheckBox时处理的地方:

    public voID onCheckBoxClick(VIEw vIEw) {        boolean isChecked = ((CheckBox) vIEw).isChecked();        Editor editor = mMainActivity.getSharedPreferences(PREF_KEY_CHECK_Box, Activity.MODE_PRIVATE).edit();        switch (vIEw.getID()) {            case R.ID.check_Box :                if (isChecked) {                    editor.putBoolean(PREF_KEY_ROUNDING, true).commit();                }                else {                    editor.putBoolean(PREF_KEY_ROUNDING, false).commit();                }                break;            }        }    }

这是我的设置:

我做了什么
1.我尝试在适配器中将变量设置到项目位置并使用getter获取位置,但这只返回显示的最后一项的位置.
2.我尝试使用ListFragment中的一些方法来获取CheckBox的位置,但它们总是返回-1.
3.我已经做了很多谷歌搜索和搜索,但我找不到解决办法让这个工作.

因此,如果有人知道我可以获得CheckBox的位置或任何其他方式,我可以告诉哪一个被点击,我将永远感激.

解决方法:

您可以使用setTag将int添加到视图中以指示其位置,然后使用getTag进行后续检索.例如:

@OverrIDepublic VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) {    ... // your other code here    CheckBox checkBox = (CheckBox) vIEw.findVIEwByID(R.ID.pref_check_Box);    checkBox.setTag(new Integer(position));}

然后,在你的onCheckBoxClick上:

public voID onCheckBoxClick(VIEw vIEw) {    Integer pos;    pos = (Integer) vIEw.getTag();    ... // do what you want with `pos` here}
总结

以上是内存溢出为你收集整理的android – 从自定义适配器获取项目位置全部内容,希望文章能够帮你解决android – 从自定义适配器获取项目位置所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1116024.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存