2

所以,这可能是一个简单的问题,或者我可能完全在这里做事,但这就是我所拥有的:

public class SetPrefsActivity extends ListActivity{
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.radiolist);
    ArrayList<Hall> listItems = new ArrayList<Hall>();
    ArrayAdapter<Hall> ar = new ArrayAdapter<Hall>(this, android.R.layout.simple_list_item_single_choice, listItems);
    setListAdapter(ar);
    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener()
    {
    boolean somethingChecked = false;
    int lastChecked;
       public void onItemClick(AdapterView arg0, View arg1, int arg2,
         long arg3) {
           if(somethingChecked){
               ListView lv = (ListView) arg0;
               TextView tv = (TextView) lv.getChildAt(lastChecked);
               CheckedTextView cv = (CheckedTextView) tv;
               cv.setChecked(false);
           }
           ListView lv = (ListView) arg0;
           TextView tv = (TextView) lv.getChildAt(arg2);
           CheckedTextView cv = (CheckedTextView) tv;
           if(!cv.isChecked())
           cv.setChecked(true);
           lastChecked = arg2;
           somethingChecked=true;
       }
    });
    new LoadListTask().execute(); //This loads Items into the List

    Button b = (Button) findViewById(R.id.savePrefBtn);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //IF SOMETHING IS SELECTED,
            //THEN UPDATE SHARED PREFERENCES

            Intent i = new Intent(SetPrefsActivity.this, SomeOtherActivity.class);
            startActivity(i);
            }

        }
    });
}
//other stuff to fill the arrayAdapter
}

我想做的是:当有人单击按钮时,它会从列表视图中获取信息并根据选择的单选选项更新共享首选项。

我遇到的问题是获取当前选定项目的索引。检索该信息的最佳方法是什么?我执行单选列表完全错误吗?

谢谢你!

4

1 回答 1

2

arg2是您列表中的位置。

看起来您正在做一些额外的(不必要的)处理。 arg1是您的行视图,并且由于android.R.layout.simple_list_item_single_choice布局仅包含 a CheckedTextView,因此您可以直接使用它而无需查找它。

CheckedTextView cv = (CheckedTextView) arg1;
于 2012-07-03T04:25:37.300 回答