2015-01-08 3 views
0

ArrayAdapter를 사용하여 목록 데이터를 ListView에 표시하는 ArrayList가 있습니다.ArrayAdapter 클래스에서 ListView를 업데이트하려면 어떻게해야합니까?

각 ListView 항목에는 하나의 TextView와 Button이 있습니다. 버튼을 클릭하면 ArrayList에 저장된 데이터가 업데이트되며 정상적으로 작동합니다. ListView를 동시에 업데이트하려면 어떻게합니까? 보기를 업데이트하려면 itemAdapter.notifyDataSetChanged()를 호출 할 수 있기 때문에 ArrayAdapter가 만들어진 Activity에서이 작업을 수행하는 방법을 알고 있습니다. 그러나 Button myButton을 클릭하면 ArrayAdapter 클래스 (예 : ListItemAdapter)에서 어떻게 처리 할 수 ​​있는지 알 수 없습니다.

아이디어가 있으십니까? 감사. 당신이 개체의 컨텍스트에 있기 때문에

startActivity를 클래스

public class StartActivity extends Activity { 

ArrayList<DataRecord> datalist; 
ListView listView; 
ListItemAdapter itemAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_screen); 

    datalist = new ArrayList<DataRecord>(); 

    listView = (ListView) findViewById(R.id.ListViewId); 
    itemAdapter = new ListItemAdapter(this, android.R.layout.simple_list_item_1, datalist); 
    listView.setAdapter(itemAdapter); 

    DataRecord dataRecord = new DataRecord("Data Item 1 "); 
    datalist.add(dataRecord); 

    dataRecord = new DataRecord("Data Item 2 "); 
    datalist.add(dataRecord); 

    dataRecord = new DataRecord("Data Item 3"); 
    datalist.add(dataRecord); 

    itemAdapter.notifyDataSetChanged(); 
} 
} 

ListItemAdapter 클래스

public class ListItemAdapter extends ArrayAdapter<DataRecord> { 
private ArrayList<DataRecord> datalist; 

public ListItemAdapter(Context context, int textViewResourceId, ArrayList<DataRecord> datalist) { 
    super(context, textViewResourceId, datalist); 
    this.datalist = datalist; 
} 

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.list_row, null); 

    } 
    Button mybutton = (Button)v.findViewById(R.id.pushBtn); 

    final DataRecord dataitem = datalist.get(position); 

    mybutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      dataitem.information = "Hello"; 
      for (int i = 0; i < datalist.size(); i++) { 
       Log.d("Item", datalist.get(i).information); // this shows the ArrayList gets updated 
      } 
     } 
    }); 


    if (dataitem != null) { 
     TextView listText = (TextView) v.findViewById(R.id.list_text); 

     if (listText != null) { 
      listText.setText(dataitem.information); 
     } 

    } 
    return v; 
} 
} 
+0

당신이 OnClickListener를 직접 notifyDataSetChanged''사용할 수 있습니다 시도 – doodeec

답변

3

그냥 어댑터에 같은 방법을 사용하지만, 객체 참조없이

mybutton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     dataitem.information = "Hello"; 
     notifyDataSetChanged(); 
    } 
}); 
0

는이

mybutton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    // 
    //update data 
    // 
    this.notifyDataSetChanged(); 
    } 
}); 
0
mybutton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     dataitem.information = "Hello"; 
     ListItemAdapter.this.notifyDataSetChanged(); 
    } 
});