Albeis
Albeis

Reputation: 1580

Item element can not be accessed on my list view

I have a ListView where I have some of subjects. When I press on the item(Subject), I can't access into My AssignaturaActivity view. I'm using a setOnItemClickListener in order to throw the activity, but it doesn't respond.

I did my own adapter,and my own item layout, so the list is Shown and I can add new subjects into the list, refresh it, but i can't get access to the item list... Here some of my Code:

public class AssignaturesActivity extends AppCompatActivity {


private ListView llistaAssignatures;
private ArrayList<Assignatura> Assignatures;

private itemAdapter adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_assignatures);

    llistaAssignatures = (ListView)findViewById(R.id.llistaAssignatures);     


    Assignatures = new ArrayList<Assignatura>();

    Assignatures.add(new Assignatura("Android"));
    Assignatures.add(new Assignatura("COMS"));
    Assignatures.add(new Assignatura("IMQSA"));
    Assignatures.add(new Assignatura("ANALOGICA"));
    Assignatures.add(new Assignatura("ALGORITMIA A/V"));



    adapter = new itemAdapter(this, R.layout.item, Assignatures);


    llistaAssignatures.setAdapter(adapter);

    llistaAssignatures.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i = new Intent(AssignaturesActivity.this, AssignaturaActivity.class);
            i.putExtra("pos", position);
            startActivity(i);
        }
    });

}



private void lanzarAcercade(View view) {
    Intent i = new Intent(this, AcercaDe.class);
    startActivity(i);
}

private void lanzarEditAssignaturaActivity(View view) {

    Intent i = new Intent(this, EditAssignaturaActivity.class);
    startActivityForResult(i, 0);

}
}

Any idea what is happening? Thanks!

EDIT: My ItemAdapter:

public class itemAdapter extends ArrayAdapter<Assignatura> { // Aprofitem els paramtres de ArrayAdapter (Herencia)

public itemAdapter(Context context,int layout_resource, ArrayList<Assignatura> data) {

    //Cridar al constructor del ArrayAdapter<item> amb super.
    super(context, layout_resource,R.id.nom, data);

}




@Override
public View getView(int position, View convertView, ViewGroup parent) {
    convertView=  super.getView(position, convertView, parent); 

    Assignatura item = getItem(position); //Retorna l'Item que estaba a la posicio "position"


    TextView item_name =  (TextView) convertView.findViewById(R.id.nom); // Busca dins de la pastilleta
    RatingBar estrelles  =(RatingBar) convertView.findViewById(R.id.ratingBar);



    item_name.setText(item.getNomAssignatura().toString());



    return convertView;



}
}

And my Item layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Assignatura"
android:id="@+id/nom"
android:textSize="30dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp" />

<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ratingBar"
android:layout_marginTop="10dp" />

</LinearLayout>

Upvotes: 0

Views: 61

Answers (2)

Leo Nix
Leo Nix

Reputation: 2105

add android:descendantFocusability="blocksDescendants" to LinearLayout to see if it helps. This should prevent the descendts which are the TextView and RatingBar from receiving focus.

Upvotes: 2

SuperFrog
SuperFrog

Reputation: 7674

I think you should modify the getView method, so the views will be recycled. I've added onClick listener to your convertView, using the context of the adapter.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
 LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.your_item_layout,
                parent, false);

        convertView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
               Intent i = new Intent(context, AssignaturaActivity.class);
               i.putExtra("pos", position);
               context.startActivity(i);
        }
       }); 

    }

    Assignatura item = getItem(position); //Retorna l'Item que estaba a la posicio "position"

    TextView item_name =  (TextView) convertView.findViewById(R.id.nom); // Busca dins de la pastilleta
    RatingBar estrelles  =(RatingBar) convertView.findViewById(R.id.ratingBar);

    item_name.setText(item.getNomAssignatura().toString());
    return convertView;
}

Upvotes: 0

Related Questions