gpt4 book ai didi

android - 记住 ListView 中选中的复选框

转载 作者:行者123 更新时间:2023-11-30 01:08:25 29 4
gpt4 key购买 nike

我有一个使用自定义适配器、布局和模型类的 ListView (包含文本和复选框)。我想将选定的复选框保存在 sqlite 数据库中,以便当我导航到另一个 Activity 然后返回时,选定的复选框保持选中状态。

public class MainActivity extends AppCompatActivity {

MyCustomAdapter dataAdapter = null;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

displayListView();

checkButtonClick();


}

private void displayListView()
{

//Array list of countries
ArrayList<States> stateList = new ArrayList<States>();

States _states = new States("AP","Andhra Pradesh",false);
stateList.add(_states);
_states = new States("DL","Delhi",true);
stateList.add(_states);
_states = new States("GA","Goa",false);
stateList.add(_states);
_states = new States("JK","Jammu & Kashmir",true);
stateList.add(_states);
_states = new States("KA","Karnataka",true);
stateList.add(_states);
_states = new States("KL","Kerala",false);
stateList.add(_states);
_states = new States("RJ","Rajasthan",false);
stateList.add(_states);
_states = new States("WB","West Bengal",false);
stateList.add(_states);

//create an ArrayAdaptar from the String Array
dataAdapter = new MyCustomAdapter(this,R.layout.state_info, stateList);
ListView listView = (ListView) findViewById(R.id.listView1);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{

public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
// When clicked, show a toast with the TextView text
States state = (States) parent.getItemAtPosition(position);
Toast.makeText(getApplicationContext(),"Clicked on Row: " + state.getName(),
Toast.LENGTH_LONG).show();
}
});
}

private void checkButtonClick()
{

Button myButton = (Button) findViewById(R.id.findSelected);

myButton.setOnClickListener(new View.OnClickListener()
{

@Override
public void onClick(View v)
{

StringBuffer responseText = new StringBuffer();
responseText.append("The following were selected...\n");

ArrayList<States> stateList = dataAdapter.stateList;

for(int i=0;i<stateList.size();i++)
{
States state = stateList.get(i);

if(state.isSelected())
{
responseText.append("\n" + state.getName());
}
}

Toast.makeText(getApplicationContext(),
responseText, Toast.LENGTH_LONG).show();
}
});
}


}
public class MyCustomAdapter extends ArrayAdapter<States> {

public ArrayList<States> stateList;

public MyCustomAdapter(Context context, int textViewResourceId, ArrayList<States> stateList)
{
super(context, textViewResourceId, stateList);
this.stateList = new ArrayList<States>();
this.stateList.addAll(stateList);
}

private class ViewHolder
{
TextView code;
CheckBox name;
}

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

ViewHolder holder = null;

Log.v("ConvertView", String.valueOf(position));

if (convertView == null)
{

LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = vi.inflate(R.layout.state_info, null);

holder = new ViewHolder();
holder.code = (TextView) convertView.findViewById(R.id.code);
holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1);

convertView.setTag(holder);

holder.name.setOnClickListener( new View.OnClickListener()
{
public void onClick(View v)
{
CheckBox cb = (CheckBox) v;
States _state = (States) cb.getTag();

/* Toast.makeText(getApplicationContext(), "Clicked on Checkbox: " + cb.getText() + " is " + cb.isChecked(),
Toast.LENGTH_LONG).show();*/

_state.setSelected(cb.isChecked());
}
});

}
else
{
holder = (ViewHolder) convertView.getTag();
}

States state = stateList.get(position);

holder.code.setText(" (" + state.getCode() + ")");
holder.name.setText(state.getName());
holder.name.setChecked(state.isSelected());

holder.name.setTag(state);

return convertView;
}

}
public class States {

String code = null;
String name = null;
boolean selected = false;

public States(String code, String name, boolean selected) {
this.code = code;
this.name = name;
this.selected = selected;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public boolean isSelected() {
return selected;
}

public void setSelected(boolean selected) {
this.selected = selected;
}
}

最佳答案

Use Realm instead of Sqlite.

//内部模型类
公共(public)类状态扩展 RealmObject {

String code = null;
String name = null;
boolean selected = false;

public States(String code, String name, boolean selected) {
this.code = code;
this.name = name;
this.selected = selected;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public boolean isSelected() {
return selected;
}

public void setSelected(boolean selected) {
this.selected = selected;
}

}`

//在你的适配器类中

RealmResults 结果 = realm.where(States.class).findAll();

            // Get the book title to show it in toast message
States state = results.get(position);

holder.code.setText(" (" + state.getCode() + ")");
holder.name.setText(state.getName());
holder.name.setChecked(state.isSelected());

holder.name.setTag(state);

您可以通过以下链接了解如何在 android studio 中使用 realm

use realm database example 1

use realm database example 2

关于android - 记住 ListView 中选中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38695894/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com