2015-10-12 2 views
0

Я новичок в Android. Я разрабатываю приложение, в котором у меня есть список сотрудников. В представлении «Список» отображается текстовое представление, например, имя сотрудника и три вида изображений. При щелчке одного изображения я должен удалить этого сотрудника из базы данных, а при щелчке другого изображения мне нужно отредактировать детали, для которых у меня есть другое действие. при щелчке этого изображения редактирования я хочу начать новую деятельность и передать детали соответствующего сотрудника, используя намерение, которое будет показано в edittext. Но это не работает должным образом. Если я нажму на удаление образа первого сотрудника, какой-то другой сотрудник удаляется. и при передаче данных в данные EditActivity также неверно.не получает правильные данные от адаптера до следующей активности

Пожалуйста, помогите мне. Как это сделать?

В моей основной деятельности Я получаю данные с сервера в формате JSONArray, и я показываю данные в виде списка. Я не понимаю, почему я не получаю правильные данные. У меня есть что-то неправильное в MainActivity или адаптер ..

Это мой адаптер

public class EmployeesAdapter extends BaseAdapter { 
    TextView categoryName; 
    Pojo pojo; 
    private Context activity1; 
    ArrayList<Pojo> data1; 
    private ArrayList<Pojo> arraylist1 = null; 
    public static LayoutInflater inflater; 
    ImageView edit, delete, historyy; 
    String del_empid; 

    public EmployeesAdapter(Context ctx, ArrayList<Pojo> employee1) { 
     activity1 = ctx; 
     data1 = employee1; 
     inflater = (LayoutInflater) activity1 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.arraylist1 = new ArrayList<Pojo>(); 
     this.arraylist1.addAll(data1); 
    } 

    @Override 
    public int getCount() { 
     return data1.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return data1.get(position); 
    } 

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     v = inflater.inflate(R.layout.manage_emp_list, parent, false); 
     pojo = data1.get(position); 
     categoryName = (TextView) v.findViewById(R.id.employeeName); 
     categoryName.setText(pojo.getMgEmpName()); 
     edit = (ImageView) v.findViewById(R.id.imgedit); 
     delete = (ImageView) v.findViewById(R.id.imgdelete); 
     historyy = (ImageView) v.findViewById(R.id.imgHistory); 
     final int pos = position; 
    edit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Pojo domain = data1.get(pos); 
      String emp_name = domain.getMgEmpName(); 
      String emp_contact = domain.getMgEmpContact(); 
      String emp_email = domain.getMgEmpEmail(); 
      String emp_appcost = domain.getMgEmpAppCost(); 
      Intent i = new Intent(activity1, EditEmployee.class); 
      i.putExtra("empname", emp_name); 
      i.putExtra("empmobile", emp_contact); 
      i.putExtra("empemail", emp_email); 
      i.putExtra("empappcost", emp_appcost); 
      activity1.startActivity(i); 

     } 
    }); 

    delete.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      del_empid = data1.get(position).getMgEmp_id(); 
      new NetCheck().execute(); 
     } 
    }); 
    return v; 
} 

Это Mainactivity, где я получаю данные с сервера, который я отображая его в ListView. Здесь я показываю только имя сотрудника с тремя изображениями в элементе списка. Но у меня есть несколько данных для каждого элемента в виде списка. Я использую функции setter и getter. Также я хочу показать предыдущие данные перед загрузкой с сервера, поэтому я использовал SharedPreferences. Я делаю что-то не так в этой MainActivty, поэтому я получаю такой тип проблемы у adpter?

public class EmployeesActivity extends AppCompatActivity { 
Pojo pojo; 
String strServerResponse = null; 
ArrayList<Pojo> employee1; 
EmployeesAdapter mainAdapter; 
String tipsss; 
ArrayList<String> tii; 
ListView mainList; 
String emplid; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_employees); 
    mainList = (ListView) findViewById(R.id.manageemployeeList); 
    employee1 = new ArrayList<Pojo>(); 
    tii = new ArrayList<String>(); 
    new NetCheck().execute(); 
}; 


private class NetCheck extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     SharedPreferences prefs = getSharedPreferences("MyPref4", MODE_PRIVATE); 

     Pojo pojo; 
     Set<String> names = prefs.getStringSet("employeename", null); 
     Set<String> ids = prefs.getStringSet("employeeid", null); 
     Set<String> mobiles = prefs.getStringSet("employeemobile", null); 
     Set<String> emails = prefs.getStringSet("employeeemail", null); 
     Set<String> appcosts = prefs.getStringSet("employeeappcost", null); 

     List<String> nameList = new ArrayList<String>(0); 
     nameList.addAll(names); 
     List<String> idList = new ArrayList<String>(0); 
     idList.addAll(ids); 
     List<String> mobileList = new ArrayList<String>(0); 
     mobileList.addAll(mobiles); 
     List<String> emailidList = new ArrayList<String>(0); 
     emailidList.addAll(emails); 
     List<String> appcostidList = new ArrayList<String>(0); 
     appcostidList.addAll(appcosts); 
     employee1.clear(); 
     for (int i = 0; i < names.size(); i++) { 
      pojo = new Pojo(); 
      pojo.setMgEmpName(nameList.get(i)); 
      pojo.setMgEmp_id(idList.get(i)); 
      pojo.setMgEmpContact(mobileList.get(i)); 
      pojo.setMgEmpEmail(emailidList.get(i)); 
      pojo.setMgEmpAppCost(appcostidList.get(i)); 
      employee1.add(pojo); 
     } 
     mainAdapter = new EmployeesAdapter(EmployeesActivity.this, employee1); 
     mainList.setAdapter(mainAdapter); 

     return; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 

      SharedPreferences preff = getSharedPreferences(
        "MyPref", MODE_PRIVATE); 
      String id = preff.getString("id", null); 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpRequest = new HttpPost(
        "http://url"); 
      httpRequest.setHeader("Content-Type", "application/json"); 
      JSONObject json = new JSONObject(); 
      json.put("employer_id", id); 
      StringEntity se = new StringEntity(json.toString()); 
      se.setContentEncoding("UTF-8"); 
      se.setContentType("application/json"); 
      httpRequest.setEntity(se); 
      HttpResponse httpRes = httpClient.execute(httpRequest); 

      java.io.InputStream inputStream = httpRes.getEntity() 
        .getContent(); 
      InputStreamReader inputStreamReader = new InputStreamReader(
        inputStream); 
      BufferedReader reader = new BufferedReader(inputStreamReader); 
      StringBuilder sb = new StringBuilder(); 

      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      inputStream.close(); 
      strServerResponse = sb.toString(); 

      if (strServerResponse != null) { 
       try { 

        JSONArray arr = new JSONArray(strServerResponse); 
        JSONObject jsonObj = arr.getJSONObject(0); 
        ArrayList<String> tii = new ArrayList<String>(); 
        ArrayList<String> tii2 = new ArrayList<String>(); 
        ArrayList<String> tii3 = new ArrayList<String>(); 
        ArrayList<String> tii4 = new ArrayList<String>(); 
        ArrayList<String> tii5 = new ArrayList<String>(); 
        for (int i = 0; i < arr.length(); i++) { 
         pojo = new Pojo(); 
         JSONObject jobj2 = arr.getJSONObject(i); 
         String empname = jobj2.optString("name"); 
         String empid = jobj2.optString("id"); 
         String empmobile = jobj2.optString("mobile"); 
         String empemail = jobj2.optString("email"); 
         String empappcost = jobj2.optString("app_cost"); 
         tii.add(empname); 
         tii2.add(empid); 
         tii3.add(empmobile); 
         tii4.add(empemail); 
         tii5.add(empappcost); 
        } 

        List<String> listTemp = tii; 
        List<String> listTemp1 = tii2; 
        List<String> listTemp2 = tii3; 
        List<String> listTemp3 = tii4; 
        List<String> listTemp4 = tii5; 

        Set<String> temp = new HashSet<String>(listTemp); 
        Set<String> temp2 = new HashSet<String>(listTemp1); 
        Set<String> temp3 = new HashSet<String>(listTemp2); 
        Set<String> temp4 = new HashSet<String>(listTemp3); 
        Set<String> temp5 = new HashSet<String>(listTemp4); 
        SharedPreferences.Editor editor = getSharedPreferences("MyPref4", MODE_PRIVATE).edit(); 
        temp.addAll(listTemp); 
        temp2.addAll(listTemp1); 
        temp3.addAll(listTemp2); 
        temp4.addAll(listTemp3); 
        temp5.addAll(listTemp4); 
        editor.putStringSet("employeename", temp); 
        editor.putStringSet("employeeid", temp2); 
        editor.putStringSet("employeemobile", temp3); 
        editor.putStringSet("employeeemail", temp4); 
        editor.putStringSet("employeeappcost", temp5); 
        editor.commit(); 

       } 

это мой класс Pojo, где у меня есть функции setter и getter для деталей сотрудников.

public class Pojo { 
     private String mg_empName; 
     private String mg_empEmail; 
     private String mg_empContact; 

     public void setMgEmpContact(String mg_empContact) { 
      this.mg_empContact = mg_empContact; 
     } 

     public String getMgEmpContact() { 
      return mg_empContact; 
     } 

     public void setMgEmpEmail(String mg_empEmail) { 
      this.mg_empEmail = mg_empEmail; 
     } 

     public String getMgEmpEmail() { 
      return mg_empEmail; 
     } 

     public void setMgEmpName(String mg_empName) { 
      this.mg_empName = mg_empName; 
     } 

     public String getMgEmpName() { 
      return mg_empName; 
     } 

    } 

Может ли кто-нибудь мне помочь. Почему у меня возникает такая проблема? Здесь что-то не так? Способ я использовал Список_массивы и затем установить данные в postExecute() метод является правильным? ......

ответ

0

Используйте этот код ...

final int pos = position; 
    edit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
Pojo domain = data1.get(pos); 
       String emp_name = domain.getMgEmpName(); 
       String emp_contact = domain.getMgEmpContact(); 
       String emp_email = domain.getMgEmpEmail(); 
       String emp_appcost = domain.getMgEmpAppCost(); 
       Intent i = new Intent(activity1, EditEmployee.class); 
       i.putExtra("empname", emp_name); 
       i.putExtra("empmobile", emp_contact); 
       i.putExtra("empemail", emp_email); 
       i.putExtra("empappcost", emp_appcost); 
       activity1.startActivity(i); 

      } 
     }); 

Она работает идеально.

+0

Спасибо, но это не работает –

+0

что можно получить в onclick можно сказать это –

+0

Надеюсь, это будет хорошо .... для меня это работает –

0

вместо инициализации pojo = data1.get(position); сделать локальный varibale в final Pojo pojo = data1.get(position); inside the getView() , потому что в вашем случае поле POJO будет retinitialized как GetView называют все строки, чтобы быть видимыми

+0

Спасибо, но это не работает –

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