-1

Существует listView в WorkDetails. Когда щелкнут список, он будет намерен EditDetails. При нажатии кнопки сохранения в нажата кнопка EditDetails, она вернет обновленное значение обратно в WorkDetails.Как обновить списокView

EditDetails

save.setOnClickListener(new View.OnClickListener() {  // if save button clicked 
      @Override 
      public void onClick(View v) { 
       Intent returnIntent = new Intent(); 
       project1=Project2.getSelectedItem().toString(); 
       description=Description.getText().toString(); 
       sqlcon.open(); 
       sqlcon.Update(ID, project1, description); 
       returnIntent.putExtra("project1", project1); 
       returnIntent.putExtra("description", description); 
       setResult(Activity.RESULT_OK, returnIntent); 
       finish(); 

      } 
     }); 

WorkDetails

 ListView listViewUpdate; 
    CustomBaseAdapter obj; 
    ArrayList<DetailsBean> results = new ArrayList<DetailsBean>(); 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) {  
    listViewUpdate = (ListView) edit_details.findViewById(R.id.listViewEdit); 
    obj = new CustomBaseAdapter(getActivity(), results, listViewUpdate); 
    listViewUpdate.setAdapter(obj); 


      listViewUpdate.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
         @Override 
         public void onItemClick(AdapterView<?> listView, View view, 
               int position, long id) { 
          mClickedPosition = position; // intent to EditDetils 
          Cursor cursor = (Cursor) listView.getItemAtPosition(position); 

          // Get the state's capital from this listview_item_row in the database. 
          ID = 
            cursor.getLong(cursor.getColumnIndexOrThrow("_id")); 
          Intent intent = new Intent(getActivity(), Edit_Details.class); 
          intent.putExtra("ID", ID); 
          startActivityForResult(intent, PROJECT_REQUEST_CODE); 


         } 
        }); 

     public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Activity B and populate ListView A 
     if (resultCode == Activity.RESULT_OK) { 
      if (requestCode == PROJECT_REQUEST_CODE) { 
       ReceiveProject = data.getStringExtra("project"); 
       ReceiveDescription = data.getStringExtra("description"); 

       if (mClickedPosition == -1) { 
        Toast.makeText(getActivity(), "A", Toast.LENGTH_LONG).show(); 
       } else { 
        Log.e("R",results+""); 
        Log.e("P",mClickedPosition+""); 
        results.get(mClickedPosition).setProject(ReceiveProject); 
        results.get(mClickedPosition).setDescription(ReceiveDescription); 
        obj.notifyDataSetChanged(); 
       } 

      } 

     } 
    } 

CustomBaseAdpter

public class CustomBaseAdapter extends BaseAdapter{ // for ListView 

     private static ArrayList<DetailsBean> searchArrayList; 
     private LayoutInflater mInflater; 
     ListView listview; 


     public CustomBaseAdapter(Context context, ArrayList<DetailsBean> results,ListView listview) { 
      searchArrayList = results; 
      this.listview=listview; 
      mInflater = LayoutInflater.from(context); 

     } 


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


     public Object getItem(int position) { 
      return searchArrayList.get(position); 
     } 

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

DetailsBean

public class DetailsBean { 

     private String project=""; 
     private String description=""; 

     public void setProject(String project){ 
      this.project=project; 
     } 

     public String getProject() 
     { 
      return project; 
     } 

     public void setDescription(String description){ 
      this.description=description; 
     } 

     public String getDescription() 
     { 
      return description; 
     } 

    } 

Как я могу обновить WorkDetails ListView так, что ляющим, чтобы показать возвращение обновленного значения из EditDetails? Когда я нажимаю список в WorkDetails, он показывает обновленное значение.

WorkDetails распространяется на фрагменты и элементы EditDetails для Activity.

ошибка LogCat

Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
      at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
      at java.util.ArrayList.get(ArrayList.java:308) 
      at com.example.project.myapplication.GUI.Edit_WorkDetails.onActivityResult(Edit_WorkDetails.java:123) 
+1

Как заполняется ваш «ListView»? Какой «адаптер» вы используете? Обычно достаточно добавить свои новые данные в массив подстановки вашего «адаптера» и вызвать «adapter.notifyDataSetChanged()» – Knossos

+1

вызов 'notifyDataSetChanged()' в адаптере listView's WorkDetails', и вы должны быть хороши для идти. – Shark

+0

Мне нужно вызвать 'notifyDataSetChanged()' на 'WorkDetails' или' CustomBaseAdapter'? – John

ответ

0

Изменение onItemClick.

listViewUpdate.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> listView, View view, 
    int position, long id) { 
     mClickedPosition = position; // intent to EditDetils 
     DetailsBean detailsBean=results.get(position); 

     // Get the state's capital from this listview_item_row in the database. 
     ID =detailsBean.getID; 
     Intent intent = new Intent(getActivity(), Edit_Details.class); 
     intent.putExtra("ID", ID); 
     startActivityForResult(intent, PROJECT_REQUEST_CODE); 


    } 
}); 
+0

В моем случае 'mClickedPosition'? – John

+0

app crashed..IndexOutOfBoundsException: Неверный индекс 0, размер 0 – John

+0

У вас есть результаты? почему результаты = null? ссылается на результаты поиска searchArrayList. Откуда вы получаете searchArrayList? –

1
  • Если Вы уверены, что когда EditDetails будет обновлять данные в adapter, используйте adapter.notifyDataSetChanged() в onActivityResult
+0

Я добавляю это 'dataAdapter.notifyDataSetChanged();' после 'ReceiveDescription = data.getStringExtra (" description ");', но без разницы – John

+0

У вас есть данные об обновлении Adapter ?. Пожалуйста, отправьте код адаптера –

+0

, пожалуйста, проверьте ..спасибо – John

0
 @Override 
      protected void onRestart() { 
       super.onRestart(); 
// call your adapter from here 
       obj = new CustomBaseAdapter(getActivity(), results, listViewUpdate); 
       listViewUpdate.setAdapter(obj); 
      } 

затем установить адаптер от onRestart() снова d проверить.

+0

onRestart ????? – John

+0

есть, onRestart(). он обновит ваш список. –

+0

Ваша проблема решена? –

0

Try следующий код -

public void changeItem(String Project,String Description) 
{ 
    DetailsBean obj = new DetailsBean(); 
    obj.setProject(" "+Project); 
    obj.setDescription(" "+" Work Description : " + " "+Description); 
    searchArrayList.add(obj); 
    add(obj); 
    notifyDataSetChanged(); 
} 
+0

не могу решить добавить – John

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