2016-08-01 6 views
0

У меня есть список (с текстом и флажком) с использованием пользовательского адаптера, макета и класса модели. Я хочу сохранить выбранные флажки в sqlite db, чтобы при переходе к другому действию, а затем возврату выделенных флажков оставалось выбранным.отмеченные флажки в listview

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; 
 
    } 
 
}

+0

Вы используете андроидскую студию или затмение ?? – Andolasoft

+0

Android Studio. –

ответ

0
Use Realm instead of Sqlite. 

// Внутри класса модели
общественного класса States распространяется 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; 
} 

} `

// Внутри ваш класс адаптера

RealmРезультаты результатов = 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); 

Вы можете следить за ссылками ниже, чтобы знать, как использовать область в андроида студии

use realm database example 1

use realm database example 2

+0

Я получаю ошибку в строке 'States state = results.get (position);'. Царство довольно новое и немного доведено до меня. Есть ли другой путь? @Andolasoft –

0
There are two more ways like : 

use android sqlite

use Shared Preference

+0

Я предпочитаю SharedPreference. Можете ли вы показать мне, как сохранять и восстанавливать проверенное состояние флажка с помощью SharedPreference? @Andolasoft –

Смежные вопросы