Reputation: 1580
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
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
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