
由于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 – 从自定义适配器获取项目位置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)