Добавить onclicklistener для каждой строки из списка (Android) - PullRequest
0 голосов
/ 13 марта 2019

Я извлек и проанализировал данные JSON с URL-адреса и отобразил их в ListView, но я не могу добавить onclicklistener в каждую строку. Я просто хочу иметь возможность выполнять действие при нажатии на строку, с данными, содержащимися в строке, чтобы получить всю информацию об этой строке в другом действии? когда я запускаю код, приложение сразу останавливается !!! спасибо

public class DemandeAdapter extends BaseAdapter {

private Context context;
private ArrayList<DemandeModel> demandeModelArrayList;


public DemandeAdapter(Context context, ArrayList<DemandeModel> demandeModelArrayList) {

    this.context = context;
    this.demandeModelArrayList = demandeModelArrayList;
}

@Override
public int getViewTypeCount() {
    return getCount();
}
@Override
public int getItemViewType(int position) {

    return position;
}

@Override
public int getCount() {
    return demandeModelArrayList.size();
}

@Override
public Object getItem(int position) {
    return demandeModelArrayList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        holder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.demande, null, true);

        holder.iv = (ImageView) convertView.findViewById(R.id.iv);
        holder.id = (TextView) convertView.findViewById(R.id.id);
        holder.name = (TextView) convertView.findViewById(R.id.name);
        holder.desc = (TextView) convertView.findViewById(R.id.desc);
        holder.date = (TextView) convertView.findViewById(R.id.date);
        holder.listView = (ListView) convertView.findViewById(R.id.lv);

        convertView.setTag(holder);
    }else {
        // the getTag returns the viewHolder object set as a tag to the view
        holder = (ViewHolder)convertView.getTag();
    }

    Picasso.get().load(demandeModelArrayList.get(position).getImgURL()).into(holder.iv);
    holder.id.setText("ID : "+demandeModelArrayList.get(position).getId());
    holder.date.setText("Date : "+demandeModelArrayList.get(position).getDate());
    holder.name.setText("Name : "+demandeModelArrayList.get(position).getNom());
    holder.desc.setText("Description : "+demandeModelArrayList.get(position).getDescription());
    holder.listView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, demandeDetails.class);
            intent.putExtra("ID",demandeModelArrayList.get(position).getId());
            intent.putExtra("Date",demandeModelArrayList.get(position).getDate());
            intent.putExtra("Name",demandeModelArrayList.get(position).getNom());
            intent.putExtra("Description",demandeModelArrayList.get(position).getDescription());
            intent.putExtra("Image",demandeModelArrayList.get(position).getImgURL());
            context.startActivity(intent);
        }
    });

    return convertView;
}

private class ViewHolder {

    protected TextView id,name,desc,date;
    protected ImageView iv;
    private ListView listView;

}

}

я делаю это мин, мой класс адаптера не в моей деятельности !!! И это другой вид деятельности, где я хочу отобразить данные

public class demandeDetails extends AppCompatActivity implements Serializable {

protected TextView id,name,desc,date;
protected ImageView img;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_demande_details);
    id = (TextView)findViewById(R.id.demande_Id);
    name = (TextView)findViewById(R.id.demande_Name);
    desc = (TextView)findViewById(R.id.demande_Desc);
    date = (TextView)findViewById(R.id.demande_Date);
    img = (ImageView)findViewById(R.id.picture_demande);

    Intent intent = getIntent();
    int imagee = intent.getExtras().getInt("Image");
    String idd = intent.getExtras().getString("ID");
    String namee = intent.getExtras().getString("Name");
    String descc = intent.getExtras().getString("Description");
    String datee = intent.getExtras().getString("Date");

    img.setImageResource(imagee);
    id.setText(idd);
    name.setText(namee);
    desc.setText(descc);
    date.setText(datee);

}

}

Ответы [ 3 ]

1 голос
/ 13 марта 2019

Вы можете добавить onItemClickListener , как показано ниже

listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

        Toast.makeText(this,"You selected : " + position,Toast.LENGTH_SHORT).show();                
    }
});
1 голос
/ 13 марта 2019

setOnClickListener на convertView.

convertView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(context, demandeDetails.class);
        intent.putExtra("ID",demandeModelArrayList.get(position).getId());
        intent.putExtra("Date",demandeModelArrayList.get(position).getDate());
        intent.putExtra("Name",demandeModelArrayList.get(position).getNom());



intent.putExtra("Description",demandeModelArrayList.get(position).getDescription());
        intent.putExtra("Image",demandeModelArrayList.get(position).getImgURL());
        context.startActivity(intent);
    }
});
1 голос
/ 13 марта 2019

Вам необходимо установить прослушиватель элементов в списке

  Listview listView = findViewById(R.id.listview);

  listView.setOnItemClickListener(new 
        OnItemClickListener() {

         @Override
         protected void onListItemClick(ListView l, View v, int 
         position, long id) {

          Log.i("Hello!", "Clicked! YAY!");

       });
...