2016-10-02 51 views
0

我有一個當前在ListView中顯示名稱列表的應用程序。 ListView中的每個項目都包含一個CheckBox和一個EditText。從ListView中檢索CheckBox的值並將其分配給數組列表中的對象

名稱的列表是由「前景」對象

的ArrayList當用戶選擇我想返回該複選框的狀態,並在相關位置分配給它的Propsects對象中的複選框提供ArrayList,以便下次打開應用程序時使用它(這將使用CSV完成)。

由於這是我第一次嘗試Android編程,因此我正在努力使用正確的偵聽器來完成此操作。我一直無法找到任何符合我想要實現的例子,或者如果我有我沒有理解他們!

任何幫助,將不勝感激!

我的代碼如下:

package com.veetox.networkmarketingmanager; 

import android.content.Context; 
import android.content.DialogInterface; 
import android.content.res.Resources; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewConfiguration; 
import android.widget.AdapterView; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.RadioGroup; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.veetox.networkmarketingmanager.data.Prospects; 
import com.veetox.networkmarketingmanager.helper.FileHelper; 
import com.veetox.networkmarketingmanager.helper.ProspectListAdapter; 
import com.veetox.networkmarketingmanager.helper.ProspectViewHolder; 

import java.io.File; 
import java.lang.reflect.Field; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity 
{ 
    public static ArrayList<Prospects> prospectList = new ArrayList<>(); 
    Resources res; 
    FileHelper fileHelper = new FileHelper(this); 
    ListView prospectsListEntry; 
    CheckBox prospectsCheckBox; 
    EditText prospectsEditText; 
    ProspectListAdapter pla; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     prospectsCheckBox = (CheckBox) findViewById(R.id.pr_checkBox); 
     prospectsEditText = (EditText) findViewById(R.id.pr_name); 

     res = getResources(); 

     createProspectList(); 

     prospectsListEntry.setOnItemClickListener(new AdapterView.OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View item, int position, long id) 
      { 
       //Create new Prospect cloning Prospect at row in ItemList that was clicked 
       Prospects prospect = pla.getItem(position); 

       //Change the state of contacted from true to false or vice versa 
       prospect.toggleContacted(); 

       //Create a ProspectViewHolder to hold the view for the row clicked 
       ProspectViewHolder viewHolder = (ProspectViewHolder) item.getTag(); 
       viewHolder.getCheckBox().setChecked(prospect.isChecked()); 

       prospectList.get(position) ; 
       pla.notifyDataSetChanged(); 

      } 
     }); 



    } 

    public void testProspects(View view) 
    { 
     prospectList = fileHelper.testProspects(); 
     pla.notifyDataSetChanged(); 

    } 


    public void createProspectList() 
    { 
     fileHelper = new FileHelper(this); 

     //Comment before testing 
     //prospectList = fileHelper.loadProspects(); 

     //Uncomment for testing 
     prospectList = fileHelper.testProspects(); 

     //Create the list 
     pla = new ProspectListAdapter(this, R.layout.prospects_list_layout, prospectList); 
     prospectsListEntry = (ListView) findViewById(R.id.prospects_list); 
     prospectsListEntry.setAdapter(pla); 

    } 
} 

package com.veetox.networkmarketingmanager.helper; 

import android.content.Context; 
import android.support.annotation.NonNull; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.EditText; 
import android.widget.TextView; 

import com.veetox.networkmarketingmanager.MainActivity; 
import com.veetox.networkmarketingmanager.R; 
import com.veetox.networkmarketingmanager.data.Prospects; 

import java.util.ArrayList; 

/** 
* Created by Matt on 29/09/2016. 
*/ 

public class ProspectListAdapter extends ArrayAdapter<Prospects> 
{ 

    private Context context; 
    private int layoutResourceId; 
    private ArrayList<Prospects> prospect; 



    public ProspectListAdapter(Context context, int layoutResourceId, ArrayList<Prospects> prospect) 
    { 
     super(context, layoutResourceId, prospect); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.prospect = prospect; 

    } 

    public int getCount() 
    { 
     return prospect.size(); 
    } 


    public Prospects getItem(int position) 
    { 
     return prospect.get(position); 
    } 

    public long getItemId(int position) 
    { 
     return position; 
    } 

    @Override 
    @NonNull 
    public View getView(int position, View convertView, @NonNull ViewGroup parent) 
    { 
     View v = convertView; 

     if (v == null) 
     { 
      LayoutInflater vi; 
      vi = LayoutInflater.from(context); 
      v = vi.inflate(layoutResourceId, parent, false); 
     } 

     Prospects prospects = prospect.get(position); 

     if (prospects != null) 
     { 
      TextView prname = (TextView) v.findViewById(R.id.pr_name); 
      CheckBox complete = (CheckBox) v.findViewById(R.id.pr_checkBox); 


      if (prname != null) 
      { 
       prname.setText(prospects.getName()); 
      } 

      if (complete != null) 
      { 
       complete.setChecked(prospects.isChecked()); 
      } 


     } 




     return v; 
    } 



} 

package com.veetox.networkmarketingmanager.data; 


/** 
* A Prospective customer 
*/ 

public class Prospects 
{ 
    private String prospectname; 
    private boolean contacted; 
    private String stringContacted; 

    public Prospects(String aName, boolean contacted) 
    { 
     prospectname = aName; 
     this.contacted = contacted; 
    } 

    public Prospects(String aName, String contacted) 
    { 
     prospectname = aName; 
     this.stringContacted = contacted; 
    } 

    public Prospects(String aName) 
    { 
     prospectname = aName; 
    } 

    public String getName() 
    { 
     return prospectname; 
    } 

    public boolean isChecked() 
    { 
     return contacted; 
    } 

    public void setName (String aName) 
    { 
     prospectname = aName; 
    } 

    public void setContacted(boolean contacted) 
    { 
     this.contacted = contacted; 
    } 

    public void toggleContacted() 
    { 
     if (contacted) 
     { 
      contacted = false; 
     } 
     else 
     { 
      contacted = true; 
     } 
    } 




} 

package com.veetox.networkmarketingmanager.helper; 

import android.content.Context; 
import android.widget.Toast; 

import com.veetox.networkmarketingmanager.data.Prospects; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.util.ArrayList; 
import java.util.Map; 
import java.util.Scanner; 


/** 
* Created by Matt on 28/09/2016. 
*/ 

public final class FileHelper 
{ 
    Context context; 


    public FileHelper(Context aContext) 
    { 
     context = aContext; 




    } 


    public void saveProspects(ArrayList<Prospects> prospects) 
    { 

     ArrayList<Prospects> p = prospects; 

     BufferedWriter bufferedFileWriter = null; 


     try 
     { 
      File aFile = new File(context.getFilesDir(), "prospects.csv"); 
      aFile.createNewFile(); 

      bufferedFileWriter = new BufferedWriter(new FileWriter(aFile)); 

      for (Prospects eachProspect : p) 
      { 
       bufferedFileWriter.write(eachProspect.getName()); 
       bufferedFileWriter.write(","); 
       bufferedFileWriter.write(String.valueOf(eachProspect.isChecked())); 
       bufferedFileWriter.newLine(); 
      } 


     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      // Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show(); 
     } 
     finally 
     { 
      try 
      { 
       bufferedFileWriter.close(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
       //Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show(); 
      } 
     } 

    } 

    public ArrayList<Prospects> loadProspects() 
    { 
     ArrayList<Prospects> prospectsList = new ArrayList<>(); 
     Scanner bufferedScanner = null; 
     Scanner lineScanner = null; 



      try 
      { 
       File aFile = new File(context.getFilesDir(), "prospects.csv"); 
       bufferedScanner = new Scanner(new BufferedReader(new FileReader(aFile))); 
       while (bufferedScanner.hasNextLine()) 
       { 
        lineScanner = new Scanner(bufferedScanner.nextLine()); 
        lineScanner.useDelimiter(","); 
        String prospect = lineScanner.next(); 
        String contacted = lineScanner.next(); 

        Prospects aProspect = new Prospects(prospect, contacted); 
        prospectsList.add(aProspect); 

       } 

      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
       //Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      finally 
      { 
       try 
       { 
        bufferedScanner.close(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
        //Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show(); 
       } 
      } 
       return prospectsList; 
      } 

     public ArrayList<Prospects> testProspects() 
     { 
      ArrayList<Prospects> p = new ArrayList<>(); 

      Prospects q = new Prospects("Matt Lee", true); 
      Prospects r = new Prospects("Rosemary Watson", false); 
      Prospects s = new Prospects("Joe Bloggs", false); 
      Prospects t = new Prospects("Ronny Corbit", false); 
      Prospects u = new Prospects("Mr Man", false); 
      Prospects v = new Prospects("Mr Bond", true); 
      Prospects w = new Prospects("Mr Blobby", true); 
      Prospects x = new Prospects("Mary Rose", false); 
      Prospects y = new Prospects("Jane Doe", false); 
      Prospects z = new Prospects("Lucy Sanders", false); 

      p.add(q); 
      p.add(r); 
      p.add(s); 
      p.add(t); 
      p.add(u); 
      p.add(v); 
      p.add(w); 
      p.add(x); 
      p.add(y); 
      p.add(z); 

      return p; 
     } 



} 
+0

您需要將適配器中的複選框選中(checked/notChecked)。你需要使用ItemId來訪問和檢索ListView中的點擊項。 – deejay

+0

謝謝!一旦我將聽衆轉移到我的適配器中,我的問題就被排序了。 – Veetox

+0

請投票並將此答案標記爲已接受。乾杯 – deejay

回答

0

您需要在適配移動你的複選框檢查(檢查/ notChecked)。你需要使用ItemId來訪問和檢索ListView中的點擊項。

相關問題