Closed krosty4782 closed 10 years ago
Have your original adapter needs to handle onClick events for each one of the items.
Thanks for your answer. Im doing this:
mAdapter = new PaisListAdapter(context,paises);
int spacing = (int)getResources().getDimension(R.dimen.rows_spacing_adapater);
int itemsPerRow = getResources().getInteger(R.integer.items_per_row);
wrapperAdapter = new MultiItemRowListAdapter(this, mAdapter, itemsPerRow, spacing);
ListView lv = (ListView)findViewById(R.id.listPaises);
lv.setAdapter(wrapperAdapter); // I have also tried with lv.setAdapter(mAdapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Intent myIntent = new Intent(ListPaisActivity.this, TweetsPaisActivity.class);
Bundle b = new Bundle();
b.putString("pais", ((Pais)wrapperAdapter.getItem(position)).getNombre());
myIntent.putExtras(b); //Optional parameters
ListPaisActivity.this.startActivity(myIntent);
}
});
Can you give me a hint? THanks
I added a demo in https://github.com/umano/MultiItemRowListAdapter/commit/6a9633954d80fb69645fc1c092e0f74c3cd901f1. Enjoy.
Thank you. I have checked the code and i 've maded similar to yours. But the problem now is the "onItemClick" event is not beeing called. Here is my code:
public class ListPaisActivity extends Activity implements OnItemClickListener
{
public static Context context ;
static PaisListAdapter mAdapter;
static MultiItemRowListAdapter wrapperAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_pais);
context = this;
Dbhelper dbh = new Dbhelper(this);
List
int spacing = (int)getResources().getDimension(R.dimen.rows_spacing_adapater);
int itemsPerRow = getResources().getInteger(R.integer.items_per_row);
wrapperAdapter = new MultiItemRowListAdapter(this, mAdapter, itemsPerRow, spacing);
ListView lv = (ListView)findViewById(R.id.listPaises);
lv.setAdapter(wrapperAdapter);
/* lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Intent myIntent = new Intent(ListPaisActivity.this, TweetsPaisActivity.class);
Bundle b = new Bundle();
b.putString("pais", ((Pais)wrapperAdapter.getItem(position)).getNombre());
myIntent.putExtras(b); //Optional parameters
ListPaisActivity.this.startActivity(myIntent);
}
}); */
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.list_pais, menu);
return true;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub
if (mAdapter != null) {
Toast t = Toast.makeText(this, "Clicked " + ((Pais)mAdapter.getItem(position)).getNombre(), Toast.LENGTH_SHORT);
t.show();
}
}
}
I finally did it.
I left the code, for somebody else:
public class ListPaisActivity extends Activity implements OnItemClickListener
{
public static Context context ;
public static PaisListAdapter mAdapter;
static MultiItemRowListAdapter wrapperAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_pais);
context = this;
Dbhelper dbh = new Dbhelper(this);
List
int spacing = (int)getResources().getDimension(R.dimen.rows_spacing_adapater);
int itemsPerRow = getResources().getInteger(R.integer.items_per_row);
wrapperAdapter = new MultiItemRowListAdapter(this, mAdapter, itemsPerRow, spacing);
ListView lv = (ListView)findViewById(R.id.listPaises);
lv.setAdapter(wrapperAdapter);
/* lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Intent myIntent = new Intent(ListPaisActivity.this, TweetsPaisActivity.class);
Bundle b = new Bundle();
b.putString("pais", ((Pais)wrapperAdapter.getItem(position)).getNombre());
myIntent.putExtras(b); //Optional parameters
ListPaisActivity.this.startActivity(myIntent);
}
}); */
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.list_pais, menu);
return true;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub
if (mAdapter != null) {
Toast t = Toast.makeText(this, "Clicked " + ((Pais)mAdapter.getItem(position)).getNombre(), Toast.LENGTH_SHORT);
t.show();
}
}
}
public class PaisListAdapter extends BaseAdapter implements OnItemClickListener {
private Context _context;
private List
public PaisListAdapter(Context context, List<Pais> listPais) {
this._context = context.getApplicationContext();
this. _listPais = listPais;
}
public PaisListAdapter(Context context){
this._context = context.getApplicationContext();
}
public void setListPais(List<Pais> listPais) {
this._listPais = listPais;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
String headerTitle = ((Pais) getItem(position)).getNombre();
int paisFoto= ((Pais) getItem(position)).getImagenId();
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.pais_item, null);
}
TextView txtVPaisNombre = (TextView) convertView.findViewById(R.id.paisNombre);
ImageView imgVPaisFoto = (ImageView) convertView.findViewById(R.id.imageeViewPais);
txtVPaisNombre.setTypeface(null, Typeface.BOLD);
txtVPaisNombre.setText(headerTitle);
// imgVPaisFoto.setImageBitmap(paisFoto);
final View clickedView = convertView;
convertView.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(null, clickedView, position, position);
}
}
});
// convertView.setOnClickListener();
try{
imgVPaisFoto.setImageResource(paisFoto);
}
catch(Exception e){
}
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return _listPais.size();
}
@Override
public Object getItem(int arg0) {
return _listPais.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
public void remove(int position) {
_listPais.remove(position);
}
public List<Pais> getList(){
return _listPais;
}
public void setOnItemClickListener(OnItemClickListener listener) {
mOnItemClickListener = listener;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub
if (ListPaisActivity.mAdapter != null) {
Toast t = Toast.makeText(ListPaisActivity.context, "Clicked " + ((Pais)ListPaisActivity.mAdapter.getItem(position)).getNombre(), Toast.LENGTH_SHORT);
t.show();
}
}
}
Thanks
Thanks for providing the coding above, it solve the problem.
Thanks! this code save some day of code!!!
Hello. I want to add a listner for each item inside my row. The problem is that, getItemPostion returns an array of the items that are in the row, so it's impossible for me to know, what item was really selected. How can i solve this problem ? Thanks