Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>why you dont attach an onItemClickListener to your ListView in your activity, instead of perform ItemClick from each inner view in the ListView</p> <pre><code> dataListView = (ListView)findViewById(R.id.dataListView); dataItems = new ArrayList&lt;DataItem&gt;(); int resID = R.layout.dataitem; aa = new DataItemAdapter(this, resID, dataItems); dataListView.setAdapter(aa); //attach a listener to the list view dataListView.setOnItemClickListener (listener); dataListView.setItemsCanFocus(true); </code></pre> <p>and inside your listener on onItemClick method you can access the activity methods.</p> <p>EDIT 1: the OnItemClickListener gives to you the following parameters, AdapterView parent, View view, int position, long </p> <p>your individual TextView is a child of the view parameter and you can access to it getting the childAt... something like this:</p> <pre><code>OnItemClickListener listener = new OnItemClickListener (){ @Override onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id){ ((TextView)view.findViewById(R.id.yourTextViewId)).getText(); //or do your stuff } } </code></pre> <p>EDIT 2:</p> <p>your main activity, remember, by convention all Class name are capitalized, so main class must be Main class</p> <pre><code>public class Main extends Activity { private ArrayList&lt;DataItem&gt; dataItems; private DataItemAdapter aa; private ListView dataListView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dataListView = (ListView)findViewById(R.id.dataListView); dataItems = new ArrayList&lt;DataItem&gt;(); int resID = R.layout.dataitem; aa = new DataItemAdapter(this, resID, dataItems); dataListView.setAdapter(aa); dataListView.setItemsCanFocus(true); populateArray(); } public void populateArray() { DataItem newItem = new DataItem( "2008","Ferrari","F430","Red","ASX772" ); dataItems.add(0, newItem); newItem = new DataItem( "2008","Ferrari","F430","Black","TZB123" ); dataItems.add(0, newItem); newItem = new DataItem( "2009","Ferrari","F430","Red","MIDAS" ); dataItems.add(0, newItem); aa.notifyDataSetChanged(); } public void modelInfo(int pos) { Log.i("modelInfo", "=" + pos); } public void makeInfo(int pos) { Log.i("makeInfo", "=" + pos); } public void assetInfo(int pos) { Log.i("assetInfo", "=" + pos); } } </code></pre> <p>Now, your adapter</p> <pre><code>public class DataItemAdapter extends ArrayAdapter&lt;DataItem&gt; { private Activity activity; private int resource; private LayoutInflater inflater=null; public DataItemAdapter(Activity _activity,int _resource,List&lt;DataItem&gt; _items) { super(_activity, _resource, _items); inflater = (LayoutInflater)_activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //i always do this way, but i dont think this is the error //inflater = LayoutInflater.from(_activity.getBaseContext()); resource = _resource; activity = _activity; } public static class ViewHolder { TextView carYear; TextView carMake; TextView carModel; TextView carColor; TextView assetTag; } @Override public View getView(int position, View convertView, ViewGroup parent) { View vi=convertView; ViewHolder holder; if (convertView == null) { vi = inflater.inflate(resource, null); holder=new ViewHolder(); holder.carYear = (TextView)vi.findViewById(R.id.carYear); holder.carMake = (TextView)vi.findViewById(R.id.carMake); holder.carModel = (TextView)vi.findViewById(R.id.carModel); holder.carColor = (TextView)vi.findViewById(R.id.carColor); holder.assetTag = (TextView)vi.findViewById(R.id.assetTag); vi.setTag(holder); } else { holder=(ViewHolder)vi.getTag(); } DataItem item = getItem(position); holder.carYear.setText(item.getCarYear()); holder.carMake.setText(item.getCarMake()); holder.carModel.setText(item.getCarModel()); holder.carColor.setText(item.getCarColor()); holder.assetTag.setText(item.getAssetTag()); holder.carYear.setTag(position); holder.assetTag.setTag(position); final OnClickListener makeListener = new OnClickListener() { @Override public void onClick(View v) { LinearLayout ll = (LinearLayout)v.getParent(); TextView tv = (TextView)ll.getChildAt(0); Integer pos = (Integer) tv.getTag(); //main.makeInfo(pos); ((Main)activity).makeInfo(pos); } }; holder.carMake.setOnClickListener(makeListener); final OnClickListener modelListener = new OnClickListener() { @Override public void onClick(View v) { LinearLayout ll = (LinearLayout)v.getParent(); TextView tv = (TextView)ll.getChildAt(0); Integer pos = (Integer) tv.getTag(); //main.modelInfo(pos); ((Main)activity).modelInfo(pos); } }; holder.carModel.setOnClickListener(modelListener); final OnClickListener assetListener = new OnClickListener() { @Override public void onClick(View v) { LinearLayout ll = (LinearLayout)v.getParent(); TextView tv = (TextView)ll.getChildAt(0); Integer pos = (Integer) tv.getTag(); //main.assetInfo(pos); ((Main)activity).assetInfo(pos); } }; holder.assetTag.setOnClickListener(assetListener); return vi; } </code></pre> <p>hope it works :)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload