Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 活动启动时SingleChoice ListView的SetChecked单选按钮_Java_Android_Listview_Android Listview - Fatal编程技术网

Java 活动启动时SingleChoice ListView的SetChecked单选按钮

Java 活动启动时SingleChoice ListView的SetChecked单选按钮,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我一直在努力创建一个由自定义ArrayAdapter填充的单选ListView(可以正常工作),但我需要在活动启动时将ListView中的预定义单选按钮设置为setChecked(true) 我正在用一个Listservers对象填充我的列表视图,该对象包含一个布尔值“default\u server”,用于确定哪个行/单选按钮应setChecked(true) 在活动正确启动后选择各种ListView项目,会根据需要在单选模式中将特定单选按钮标记为setChecked(true) 我的代码:

我一直在努力创建一个由自定义ArrayAdapter填充的单选ListView(可以正常工作),但我需要在活动启动时将ListView中的预定义单选按钮设置为
setChecked(true)

我正在用一个
List
servers对象填充我的列表视图,该对象包含一个布尔值“default\u server”,用于确定哪个行/单选按钮应
setChecked(true)

在活动正确启动后选择各种ListView项目,会根据需要在单选模式中将特定单选按钮标记为
setChecked(true)

我的代码:

ServerActivity.java

public class ServersActivity extends FragmentActivity
//FragmentActivity needed to display dialog fragment when ListView item clicked
...
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.server_list);
    servers = getServers();

    lv = (ListView) findViewById(android.R.id.list);
    lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    adapter = new ServerActivityArrayAdapter(this, R.layout.server_list_item, servers);
    lv.setAdapter(adapter);

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // show dialog if not long clicked
            if (!longClicked) {
                lv.setItemChecked(position, true);
                showServerDialog(position);
            }
        }
    });
}
public class ServerActivityArrayAdapter extends ArrayAdapter<Server> {

private int layout;
private int mSelectedPosition = -1;
private RadioButton mSelectedRB;

private static LayoutInflater inflater;

public ServerActivityArrayAdapter(Context context, int layout, List<Server> servers) {
    super(context, layout, servers);
    ListArrays listArrays = new ListArrays(context);
    this.layout = layout;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

private static class ServerViewHolder {
    private TextView textView;
    private RadioButton radioButton;

    public ServerViewHolder() {
        // EMPTY DEFAULT CONSTRUCTOR
    }
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    final Server server = this.getItem(position);
    final ServerViewHolder viewHolder;

    if (convertView == null) {
        convertView = inflater.inflate(layout, parent, false);
        viewHolder = new ServerViewHolder();
        viewHolder.textView = (TextView) convertView.findViewById(R.id.tvServerName);
        viewHolder.radioButton = (RadioButton) convertView.findViewById(R.id.rbDefault);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ServerViewHolder) convertView.getTag();
    }

    // TODO: SET THE DEFAULT SERVER

    viewHolder.radioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (position != mSelectedPosition && mSelectedRB != null) {
                mSelectedRB.setChecked(false);
            }
            mSelectedPosition = position;
            notifyDataSetChanged();
            mSelectedRB = (RadioButton) v;
            server.setDefaultServer(mSelectedRB.isChecked());
        }
    });

    if (mSelectedPosition != position) {
        viewHolder.radioButton.setChecked(false);
    } else {
        viewHolder.radioButton.setChecked(true);
        if (mSelectedRB != null && viewHolder.radioButton != mSelectedRB) {
            mSelectedRB = viewHolder.radioButton;
        }
    }

    viewHolder.textView.setText(server.getName());
    return convertView;
    }
}
public class ServersActivity扩展了FragmentActivity
//碎片单击ListView项时显示对话框碎片所需的活动
...
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.server_列表);
servers=getServers();
lv=(ListView)findViewById(android.R.id.list);
lv.setChoiceMode(ListView.CHOICE\u MODE\u SINGLE);
adapter=new ServerActivityArrayAdapter(此,R.layout.server\u列表\u项,服务器);
低压设置适配器(适配器);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//如果未长时间单击,则显示对话框
如果(!longClicked){
lv.setItemChecked(位置,真);
显示服务器对话框(位置);
}
}
});
}
ServerActivityArrayAdapter.java

public class ServersActivity extends FragmentActivity
//FragmentActivity needed to display dialog fragment when ListView item clicked
...
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.server_list);
    servers = getServers();

    lv = (ListView) findViewById(android.R.id.list);
    lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    adapter = new ServerActivityArrayAdapter(this, R.layout.server_list_item, servers);
    lv.setAdapter(adapter);

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // show dialog if not long clicked
            if (!longClicked) {
                lv.setItemChecked(position, true);
                showServerDialog(position);
            }
        }
    });
}
public class ServerActivityArrayAdapter extends ArrayAdapter<Server> {

private int layout;
private int mSelectedPosition = -1;
private RadioButton mSelectedRB;

private static LayoutInflater inflater;

public ServerActivityArrayAdapter(Context context, int layout, List<Server> servers) {
    super(context, layout, servers);
    ListArrays listArrays = new ListArrays(context);
    this.layout = layout;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

private static class ServerViewHolder {
    private TextView textView;
    private RadioButton radioButton;

    public ServerViewHolder() {
        // EMPTY DEFAULT CONSTRUCTOR
    }
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    final Server server = this.getItem(position);
    final ServerViewHolder viewHolder;

    if (convertView == null) {
        convertView = inflater.inflate(layout, parent, false);
        viewHolder = new ServerViewHolder();
        viewHolder.textView = (TextView) convertView.findViewById(R.id.tvServerName);
        viewHolder.radioButton = (RadioButton) convertView.findViewById(R.id.rbDefault);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ServerViewHolder) convertView.getTag();
    }

    // TODO: SET THE DEFAULT SERVER

    viewHolder.radioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (position != mSelectedPosition && mSelectedRB != null) {
                mSelectedRB.setChecked(false);
            }
            mSelectedPosition = position;
            notifyDataSetChanged();
            mSelectedRB = (RadioButton) v;
            server.setDefaultServer(mSelectedRB.isChecked());
        }
    });

    if (mSelectedPosition != position) {
        viewHolder.radioButton.setChecked(false);
    } else {
        viewHolder.radioButton.setChecked(true);
        if (mSelectedRB != null && viewHolder.radioButton != mSelectedRB) {
            mSelectedRB = viewHolder.radioButton;
        }
    }

    viewHolder.textView.setText(server.getName());
    return convertView;
    }
}
公共类ServerActivityArrayAdapter扩展了ArrayAdapter{
专用int布局;
private int mSelectedPosition=-1;
专用单选按钮mSelectedRB;
私人静电充气机;
公共服务器ActivityArrayAdapter(上下文上下文、int布局、列表服务器){
超级(上下文、布局、服务器);
ListArrays ListArrays=新的ListArrays(上下文);
this.layout=布局;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
私有静态类ServerViewHolder{
私有文本视图文本视图;
专用单选按钮单选按钮;
公共服务器视图持有者(){
//空默认构造函数
}
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终服务器=this.getItem(位置);
最终服务器视图持有者视图持有者;
if(convertView==null){
convertView=充气机。充气(布局,父级,假);
viewHolder=新服务器viewHolder();
viewHolder.textView=(textView)convertView.findViewById(R.id.tvServerName);
viewHolder.radioButton=(radioButton)convertView.findViewById(R.id.rbDefault);
convertView.setTag(viewHolder);
}否则{
viewHolder=(ServerViewHolder)convertView.getTag();
}
//TODO:设置默认服务器
viewHolder.radioButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(position!=mSelectedPosition&&mSelectedRB!=null){
mSelectedRB.setChecked(false);
}
mSelectedPosition=位置;
notifyDataSetChanged();
mSelectedRB=(单选按钮)v;
setDefaultServer(mSelectedRB.isChecked());
}
});
如果(mSelectedPosition!=位置){
viewHolder.radioButton.setChecked(假);
}否则{
viewHolder.radioButton.setChecked(真);
if(mSelectedRB!=null&&viewHolder.radioButton!=mSelectedRB){
mSelectedRB=viewHolder.radioButton;
}
}
viewHolder.textView.setText(server.getName());
返回视图;
}
}
同样,我的
列表
服务器对象正在填充ListView,随后的对话框弹出窗口(当单击一行时)正确,并且每行上的单选按钮当前以单选模式运行。我正在使用
server.setDefaultServer(mSelectedRB.isChecked()),以更新哪个服务器具有默认服务器(true)


到目前为止,我在ServerActivityArrayAdapter中尝试的一切似乎都打破了单选按钮的单选模式要求。我该如何解决这个问题?

我确实按照Mridul的建议返回并在我的项目中实现了共享首选项,但解决方案实际上并不需要它们

基本上,我更新了ServerActivityArrayAdapter类的构造函数,以便在创建ServerActivity类时从中传递默认服务器的ID。此外,我还设置了mselectionposition=defServer,以便在所有内容都已充气时检查ListView中的正确单选按钮

public ServerActivityArrayAdapter(Context context, int layout, List<Server> servers, int defServer) {
    super(context, layout, servers);
    ListArrays listArrays = new ListArrays(context);
    this.layout = layout;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mSelectedPosition = defServer;
}
公共服务器ActivityArrayAdapter(上下文上下文、int布局、列表服务器、int defServer){ 超级(上下文、布局、服务器); ListArrays ListArrays=新的ListArrays(上下文); this.layout=布局; 充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务); mSelectedPosition=defServer; }