Reputation: 25
I was stuck all day. Couldn't find my mistake.
I created a Custom ListView, and I just want to be able to click on it to launch a new intent in HourListView.
public class CustomList extends ArrayAdapter<String> {
private final ArrayList<String> hourList;
private final Activity context;
public CustomList(Activity context,
ArrayList<String> hourList) {
super(context, R.layout.hour_list_adapter, hourList);
this.context = context;
this.hourList = hourList;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
View rowView = view;
ViewHolder viewHolder = null;
// LayoutInflater inflater = context.getLayoutInflater();
// View rowView= inflater.inflate(R.layout.hour_list_adapter, parent, false);
if(rowView == null)
{
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(R.layout.hour_list_adapter, parent, false);
viewHolder = new ViewHolder();
viewHolder.type_frequenceTV = (TextView) rowView.findViewById(R.id.type_frequence);
viewHolder.dateTV = (TextView) rowView.findViewById(R.id.date);
viewHolder.dureeTV = (TextView) rowView.findViewById(R.id.duree);
viewHolder.commentaireTV = (TextView) rowView.findViewById(R.id.commentaire);
viewHolder.simuIV = (ImageView) rowView.findViewById(R.id.simulateur);
viewHolder.doubleIV = (ImageView) rowView.findViewById(R.id.doubleFrequence);
rowView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder)rowView.getTag();
}
viewHolder.type_frequenceTV.setText(HourListActivity.hourObjects.get(position).get("type_frequence").toString());
viewHolder.dureeTV.setText(HourListActivity.hourObjects.get(position).get("duree").toString());
viewHolder.commentaireTV.setText(HourListActivity.hourObjects.get(position).get("comment").toString());
Date dateAndTime = (Date) HourListActivity.hourObjects.get(position).get("date");
SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yy à HH:mm");
String formatted = format1.format(dateAndTime.getTime());
viewHolder.dateTV.setText("Le " + formatted);
if ((Boolean) HourListActivity.hourObjects.get(position).get("double"))
{
viewHolder.doubleIV.setVisibility(View.VISIBLE);
}
else
{
viewHolder.doubleIV.setVisibility(View.GONE);
}
if ((Boolean) HourListActivity.hourObjects.get(position).get("simulateur"))
{
viewHolder.simuIV.setVisibility(View.VISIBLE);
}
else
{
viewHolder.simuIV.setVisibility(View.GONE);
}
rowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return rowView;
}
static class ViewHolder
{
TextView type_frequenceTV;
TextView dateTV ;
TextView dureeTV ;
TextView commentaireTV ;
ImageView simuIV ;
ImageView doubleIV ;
}
}
Then this is the HourListActivity where I want to be able to click.
public class HourListActivity extends AppCompatActivity {
//ArrayAdapter<String> arrayAdapter;
CustomList adapter;
ListView hourListView;
static ArrayList<String> hourList;
static ArrayList<String> hourListID;
static ArrayList<ParseObject> hourObjects = new ArrayList<ParseObject>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hour_list);
hourList = new ArrayList<>();
hourListID = new ArrayList<>();
hourListView = (ListView) findViewById(R.id.listView);
adapter = new CustomList(HourListActivity.this,hourList);
//arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, hourList);
hourListView.setAdapter(adapter);
hourListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println("CLIC !!!!!!!!!!!!!!!!!!!!!");
ParseQuery<ParseObject> query = ParseQuery.getQuery("Frequence");
query.getInBackground(hourListID.get(position), new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
if (e == null) {
Intent intent = new Intent(getApplicationContext(), ModifyHourActivity.class);
intent.putExtra("objectID", object.getObjectId());
startActivity(intent);
} else {
// something went wrong
}
}
});
}
});
ParseQuery<ParseObject> query = ParseQuery.getQuery("Frequence");
query.whereEqualTo("username", ParseUser.getCurrentUser().getUsername());
System.out.println("username: " + ParseUser.getCurrentUser().getUsername() );
query.orderByDescending("date");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if (e == null)
{
if (objects.size() > 0)
{
hourObjects.clear();
for (ParseObject frequence : objects)
{
String result = "";
result += frequence.get("date") + " - "
+ frequence.get("type_frequence") + " - "
+ frequence.get("duree") + " - "
+ frequence.get("comment") + " - "
+ frequence.get("double") + " - "
+ frequence.get("simulateur") + " - ";
System.out.println("Résultat : " + result);
hourList.add(result.toString());
hourListID.add(frequence.getObjectId());
ParseObject newHour = new ParseObject("Temp");
newHour.put("username", frequence.get("username"));
// newHour.put("id", frequence.get("objectId"));
newHour.put("type_frequence", frequence.get("type_frequence"));
newHour.put("date", frequence.get("date"));
newHour.put("duree", frequence.get("duree"));
newHour.put("comment", frequence.get("comment"));
newHour.put("double", frequence.get("double"));
newHour.put("simulateur", frequence.get("simulateur"));
hourObjects.add(newHour);
}
Toast.makeText(HourListActivity.this, "Liste des heures récupérée !",
Toast.LENGTH_LONG).show();
adapter.notifyDataSetChanged();
}
}
else
{
}
}
});
A lastly my xml file for the Custom View:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:orientation="horizontal"
android:layout_margin="5dp"
>
<TextView
android:id="@+id/type_frequence"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:gravity="center"
android:text="DEP S"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/buttonTextColor"
android:paddingLeft="10dp"
android:paddingRight="10dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="35dp"
android:orientation="horizontal">
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:textSize="15dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="12 avril 2016 - 08:00"
android:layout_marginLeft="5dp"
/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<TextView
android:id="@+id/duree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:text="1.00"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/buttonTextColor"
android:layout_alignParentEnd="true"
android:paddingLeft="10dp"
android:paddingRight="10dp"
/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="35dp"
android:orientation="horizontal">
<TextView
android:id="@+id/commentaire"
android:layout_width="wrap_content"
android:layout_marginLeft="5dp"
android:layout_height="wrap_content"
android:text="Commentaire"
/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true">
<ImageView
android:id="@+id/doubleFrequence"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_column="1"
android:src="@drawable/double_96" />
<ImageView
android:id="@+id/simulateur"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_column="1"
android:src="@drawable/simu_96"
android:layout_toStartOf="@+id/doubleFrequence" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Thanks in advance for any help ! :)
Upvotes: 1
Views: 112
Reputation: 5069
As far as I am concerned if you are facing an error with setOnClickListener you can try this Go to Tools--> sync with Gradle.
It helped me when I was stucked with the intent problem!
Upvotes: 0
Reputation: 5287
What happens when you delete this part in your adapter ?
rowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
I guess what happens is that the view are created after you have defined the ItemClickListener in your activity, resulting in the ClickListener being overriden at run time by the one in your adapter.
Upvotes: 1