Se si desidera utilizzare un metodo della classe personalizzata è necessario implementare una classe ArrayAdapter per il custode ... Come creare questo?
Primo passo
Ottieni il tuo progetto e creare una nuova classe. Poi si estende classe con ArrayAdapter<YourObject>{}
e dichiarare all'interno del vostro atributes che ha bisogno di voi ... Il mio esempio:
public class Room_Adapter extends ArrayAdapter<Room_Object> {
//Declaration of Atributes
private ArrayList<Room_Object> Rooms_Array;
private final Activity context;
private final ListView lvBuinding;
Seconda
dichiarare un costruttore per questa classe, sempre avete bisogno di un'attività e ArrayList, mette dentro gli altri se avete bisogno di ... Nel mio caso ho bisogno ListView ... il mio esempio:
public Room_Adapter(Activity context, ArrayList<Room_Object> Rooms_Array,ListView lvBuinding) {
super(context, R.layout.room_layout, Rooms_Array);
this.context = context;
this.Rooms_Array = Rooms_Array;
this.lvBuinding = lvBuinding;
}
il metodo eccellente nees la vostra attività, layout personalizzato (se lo avete) e l'array.
Terzo
dichiarare una classe statica o crearne uno nuovo se si dispone di un layout di riga personalizzata. Il mio esempio ha una classe statica:
public static class Room_View{
//Declaration of Atributes
TextView RoomName;
ImageView RoomState;
TextView NoTroubles;
Button btnRoomRow;
ImageButton btnShowRoomTasks;
ImageButton btnAddTasks;
RelativeLayout RowLayout;
}
Quarto
metodo Override GetView.
@Override
public View getView(int position, View ConvertView, ViewGroup parent) {
//Declaration of Variables
Room_View rowView; //Custom static class with controls
LayoutInflater inflator = context.getLayoutInflater();
if (ConvertView == null) {
rowView = new Room_View();
ConvertView = inflator.inflate(R.layout.room_layout,null,true); //Inflate your view with your custom view.
rowView.RoomName = (TextView) ConvertView.findViewById(R.id.txtvRoom);
rowView.RoomState = (ImageView) ConvertView.findViewById(R.id.ivRoomState);
rowView.NoTroubles = (TextView) ConvertView.findViewById(R.id.txtvNoTroubles);
rowView.btnRoomRow = (Button) ConvertView.findViewById(R.id.btnRoomRow);
rowView.btnAddTasks = (ImageButton) ConvertView.findViewById(R.id.btnAddTask);
rowView.btnShowRoomTasks = (ImageButton) ConvertView.findViewById(R.id.btnShowRoomTasks);
rowView.RowLayout = (RelativeLayout) ConvertView.findViewById(R.id.rowLayout);
ConvertView.setTag(rowView);
}
else
{
rowView = (Room_View) ConvertView.getTag();
}
//Here custom your control stats
Room_Object Room = Rooms_Array.get(position);
rowView.RoomName.setText(Room.getRoomName());
rowView.NoTroubles.setVisibility(View.INVISIBLE);
rowView.btnShowRoomTasks.setClickable(true);
rowView.btnShowRoomTasks.setImageResource(R.drawable.list_3a4b66_50);
rowView.btnShowRoomTasks.setOnClickListener(OnShowTasksClickListener);
//This is for add ClickListiner in my buttons...
rowView.btnAddTasks.setOnClickListener(OnAddTasksClickListener);
rowView.btnRoomRow.setOnClickListener(OnAddTasksClickListener);
if(Room.getStatus().equals("Checked")){
rowView.RowLayout.setBackgroundColor(0xFFC7E6C7);
rowView.btnShowRoomTasks.setClickable(false);
rowView.btnShowRoomTasks.setImageResource(R.drawable.list_999999_50);
rowView.RoomState.setImageResource(R.drawable.check_3ebf4b_50);
}
else if(Room.getStatus().equals("Blocked")){
rowView.RowLayout.setBackgroundColor(0xFFDBC3E5);
rowView.RoomState.setImageResource(R.drawable.key_9330e0_50);
}
else if(Room.getStatus().equals("Dirty")){
rowView.RowLayout.setBackgroundColor(0xfffceedb);
rowView.RoomState.setImageResource(R.drawable.icon_housekeeping_3_yellow);
}
else if(Room.getStatus().equals("Troubled")){
rowView.RowLayout.setBackgroundColor(0xFFF4CECD);
rowView.RoomState.setImageResource(R.drawable.wrench_eb3232_50);
rowView.NoTroubles.setVisibility(View.VISIBLE);
try {
rowView.NoTroubles.setText(Integer.toString(Room.getNoTasks()));
}
catch (Exception ex){
Log.e("-- Error --",ex.getMessage());
}
}
//
//Pay attention *************************************************
//
//Now if you needs to use your custom external class this is the site, now imagine that you need gets string from your custom class in the text view, then:
//Declare class
CustomClass object = new CustomClass();
rowView.(CUSTOM CONTROL FROM YOUR STATIC CLASS).(METHOD OF CONTROL)(object.(CUSTOM METHOD OF YOUR OBJECT));
//For example If you follows my sample then:
rowView.NoTroubles.setText(object.getNumberOfTroubles().toString);
return ConvertView;
}
//Listener Methods for my button controls
private View.OnClickListener OnShowTasksClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int positionSelected = lvBuinding.getPositionForView((View) v.getParent());
int totalRooms = lvBuinding.getCount() - 1;
int actualRoom = totalRooms - positionSelected;
try{
//Your code;
}
catch (Exception ex){
Log.e("-- CustomError --", ex.getMessage());
}
}
};
private View.OnClickListener OnAddTasksClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int positionSelected = lvBuinding.getPositionForView((View) v.getParent());
int totalRooms = lvBuinding.getCount() - 1;
int actualRoom = totalRooms - positionSelected;
try{
//Your code;
}
catch (Exception ex){
Log.e("-- CustomError --", ex.getMessage());
}
}
};
}
penso che questo è che si ha bisogno, se avete bisogno di maggiori informazioni o stesso consiglio di me e cerco di aiuta ... Buona fortuna, Eduardo!
Esattamente quello di cui avevo bisogno, grazie! –