-2

チェックボックス、編集テキスト、テキストビューを使用してリストビューを作成しました。
データはSQLサーバーのリストビューに入力されます。しかし、チェックボックスで使用できません onCheckedChangedListener。チェックボックスをクリックすると、textviewとedittextの対応するデータが保存されないように..

私はアダプタークラスのどこかで間違いを犯していることを知っています..

onCheckedChangedListenerデータを保存する方法と、アダプター クラスで使用するロジックを教えてください。

pojo クラスのコード

public class Model {

 public String name="";
    public boolean selected=false;
    public String score="";

    public Model(String name) { 
       this.name = name;  
       selected = false;
        score="";          
   }
            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;    
     }

    public String getScore() {     
    return score;    
    }

    public void setScore(String score) {
        this.score = score;  
        }
    }

Adapter クラスのコード

public class MyAdapter extends ArrayAdapter<Model> {

private final List<Model> list;   
private final Activity context;

public MyAdapter(Activity context, List<Model> list)
{
   super(context, R.layout.row, list);  
   this.context = context;       
   this.list = list;   
    }

static class ViewHolder
{        
    protected TextView text; 
    protected CheckBox checkbox;        
    protected EditText scores;    
}

@Override   
public View getView(int position, View convertView, ViewGroup parent)
{        
    View view = null;   
    if (convertView == null)
    {            
        LayoutInflater inflator = context.getLayoutInflater(); 

        view = inflator.inflate(R.layout.row, null); 

        final ViewHolder viewHolder = new ViewHolder(); 
        viewHolder.text = (TextView) view.findViewById(R.id.label);    
        viewHolder.scores=(EditText) view.findViewById(R.id.txtAddress);      
        viewHolder.scores.addTextChangedListener(new TextWatcher()
        {  
            public void onTextChanged(CharSequence s, int start, int before, int count) {      
                Model element=(Model)viewHolder.scores.getTag();    
                element.setScore(s.toString());        
            }        
            public void beforeTextChanged(CharSequence s, int start, int count,int after)
            {       
            }      
            public void afterTextChanged(Editable s)
            {                              
            }
            });         
        viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);  
        viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {   
                Model element = (Model) viewHolder.checkbox.getTag(); 

                element.setSelected(buttonView.isChecked()); 



                }         
            }); 
        viewHolder.checkbox.setTag(list.get(position));      
        viewHolder.scores.setTag(list.get(position));
        view.setTag(viewHolder);   
    }
    else
    {
        view = convertView; 
        ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));  
        ((ViewHolder) view.getTag()).scores.setTag(list.get(position));   
        }                 
        ViewHolder holder = (ViewHolder) view.getTag();     
        holder.text.setText(list.get(position).getName());    
        holder.scores.setText(list.get(position).getScore());      
        holder.checkbox.setChecked(list.get(position).isSelected());     
        return view;

 } 

}

MainActivity クラスのコード

public class MainActivity extends Activity { 
ListView listView;
 Button btnSave;
 Connection connect;
    ArrayAdapter<Model> adapter;
    MyConnection mycon;
    List<Model> list = new ArrayList<Model>();
    List<String>data=new ArrayList<String>();
    List<String>data2=new ArrayList<String>();
    StringBuilder sb;



    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        mycon=new MyConnection(getApplicationContext());
        listView = (ListView) findViewById(R.id.my_list);
        btnSave = (Button)findViewById(R.id.btnSave);
        sb=new StringBuilder();
        adapter = new MyAdapter(this,getModel());

        listView.setAdapter(adapter);
        if(list.isEmpty()){
            Toast.makeText(getApplicationContext(), "kuldeep", Toast.LENGTH_LONG).show();
        }

        btnSave.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                for (int i = 0; i < list.size(); i++) {
                   Toast.makeText(getBaseContext(), "Name : "+list.get(i).getName() +" Selected: "+list.get(i).isSelected()+"address: "+list.get(i).getScore().toString(), Toast.LENGTH_SHORT).show();

                }

            }
        });
            }


    private List<Model> getModel() {
        list.clear();
        try{
        Statement smt=mycon.connection().createStatement();
        ResultSet rs=smt.executeQuery("WORKINGTYPE");
        while(rs.next()){
            list.add(new Model(rs.getString("FIELD_NAME")));
        }
        }catch(Exception e){
            e.printStackTrace();
        }

                /*  list.add(new Model("kuldeep"));
                    list.add(new Model("sandeep"));
                    list.add(new Model("ravi"));
                    list.add(new Model("pradeep"));
                    list.add(new Model("praveena"));
                    list.add(new Model("ruchi"));
                    list.add(new Model("vikas"));
                    list.add(new Model("sonu"));
                    list.add(new Model("ashu"));

        */

                return list;
    }
    }

textview と EditText のデータを保存するには、どのロジックを使用する必要があり、Adapter クラスのどこに書き込む必要がありますか..

4

3 に答える 3

1

解決策ではないかもしれませんが、提案です。
「if」条件内でリスナーを宣言しないことをお勧めします。つまり、

  • IF convertview == null
    • ビューを見つける
  • そうしないと
    • getTag()
  • 残りのコード
于 2013-09-07T08:23:25.870 に答える
0

古い質問であることは承知していますが、他の誰かが同じ問題に直面している場合は、Adapter クラスを次のコードに置き換えてください。

public class MyAdapter extends ArrayAdapter<Model> implements TextWatcher{

private final List<Model> list;   
private final Context context;

public MyAdapter(Context context, List<Model> list)
{
   super(context, R.layout.row, list);  
   this.context = context;       
   this.list = list;   
    }

static class ViewHolder
{        
    protected TextView text; 
    protected CheckBox checkbox;        
    protected EditText scores;    
}

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

    ViewHolder viewHolder = null;  

    if (convertView == null){            
        LayoutInflater inflator = LayoutInflater.from(context);

        convertView = inflator.inflate(R.layout.row, null); 

        viewHolder = new ViewHolder(); 
        viewHolder.text = (TextView) view.findViewById(R.id.label);    
        viewHolder.scores=(EditText) view.findViewById(R.id.txtAddress);
        viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);  

        viewHolder.checkbox.setTag(list.get(position));      
        viewHolder.scores.setTag(list.get(position));
        convertView.setTag(viewHolder);   
    }
    else
    {
        convertView = (ViewHolder) convertView.getTag();  
        }

viewHolder.scores.addTextChangedListener(this)

viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {   
                Model element = (Model) viewHolder.checkbox.getTag(); 

                element.setSelected(buttonView.isChecked()); 

                }         
            }); 

        ViewHolder holder = (ViewHolder) view.getTag();     
        holder.text.setText(list.get(position).getName());    
        holder.scores.setText(list.get(position).getScore());      
        holder.checkbox.setChecked(list.get(position).isSelected());     
        return view;

 } 

@Override            
public void onTextChanged(CharSequence s, int start, int before, int count) {      
                Model element=(Model)viewHolder.scores.getTag();    
                element.setScore(s.toString());        
            }        

@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after)
            {       
            }      

@Override
public void afterTextChanged(Editable s)
            {                              
            }
            });         

}
于 2016-10-06T06:29:19.900 に答える
0

チェックボックスイベントが発生していないということですか?

setOnClickListenerは自分のCheckboxイベントに使用します:

CheckBox checkbox = (CheckBox)view.findViewById(R.id.item_checkbox);
checkbox.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        // Mark model as selected/not selected
        if (model.isSelected())
            model.markAsNotSelected();
        else
            model.markAsSelected();
    }                   
});
于 2013-09-07T08:26:36.083 に答える