我正在从事一个android项目,我必须从服务器获取数据并将其显示在一个自定义列表视图中以及一个按钮,我已经提取并显示了列表视图,但是我想每当点击列表视图的每一行中的按钮时,都会启动一个对话框。我被困在如何发起按钮按钮的呼叫,我曾尝试在某些方面,但不工作..我的代码粘贴在下面,任何帮助将不胜感激。在自定义列表视图按钮中使用自定义对话框点击
我的contactAdapter类代码如下:
package com.example.sohan.doctor;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.FragmentManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.support.v4.app.DialogFragment;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Sohan on 6/9/2016.
*/
public class ContactAdapter extends ArrayAdapter<Contacts> {
// notification nt = new notification();
List<Contacts> list = new ArrayList<Contacts>();
View row;
ContactHolder contactHolder;
LayoutInflater inflater;
View v;
private Activity activity;
public ContactAdapter(Context context, int resource) {
super(context, resource);
}
public void add(List<Contacts> updatedList) {
list.clear();
list.addAll(updatedList);
notifyDataSetChanged();
}
@Override
public Contacts getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
row = convertView;
if(row==null){
LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.view_symptom_layout,parent,false);
contactHolder = new ContactHolder();
contactHolder.Name =(TextView) row.findViewById(R.id.textView2);
contactHolder.Age =(TextView) row.findViewById(R.id.textView3);
contactHolder.Height =(TextView) row.findViewById(R.id.textView4);
contactHolder.Weight =(TextView) row.findViewById(R.id.textView5);
contactHolder.Symptom =(TextView) row.findViewById(R.id.textView6);
contactHolder.button = (Button) row.findViewById(R.id.button3);
contactHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { // this is the onClick method for the custom button
String name;
// name = list.get(position).getName();
// Toast.makeText(getContext().getApplicationContext(), name+" is served ", Toast.LENGTH_LONG).show();
// Toast.makeText(getContext().getApplicationContext(), "Position of "+name+" is "+position, Toast.LENGTH_LONG).show();
callDialog cd = new callDialog();
cd.showBox();
//android.support.v4.app.FragmentManager fm = cd.getSupportFragmentManager();
//md.show(, "my_dialog");
//--------- another solution
// inflater = getActivity().getLayoutInflater();
// v = inflater.inflate(R.layout.custom_dialogbox, null);
// AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// builder.setView(v).setPositiveButton("Send Treatment", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
//
// }
// });
// builder.show();
//---------- another solution
}
});
row.setTag(contactHolder);
}
else{
contactHolder = (ContactHolder)row.getTag();
}
Contacts contacts = (Contacts)this.getItem(position);
contactHolder.Name.setText("Name: "+contacts.getName());
contactHolder.Age.setText("Age: "+contacts.getAge());
contactHolder.Height.setText("Height: "+contacts.getHeight());
contactHolder.Weight.setText("Weight: "+contacts.getWeight());
contactHolder.Symptom.setText("Symptoms: " + contacts.getSymptom());
return row;
}
public Activity getActivity() {
return activity;
}
static class ContactHolder{
TextView Name;
TextView Age;
TextView Height;
TextView Weight;
TextView Symptom;
Button button;
}
class callDialog extends FragmentActivity {
public void showBox(){
MyDialog md = new MyDialog();
md.show(getSupportFragmentManager(), "my_dialog_box");
}
}
}
对话框代码如下:
package com.example.sohan.doctor;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
/**
* Created by Sohan on 7/13/2016.
*/
public class MyDialog extends DialogFragment {
LayoutInflater inflater;
View v;
public Dialog onCreateDialog(Bundle savedInstanceState) {
inflater = getActivity().getLayoutInflater();
v = inflater.inflate(R.layout.custom_dialogbox, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(v).setPositiveButton("Send Treatment", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
return builder.create();
}
}
您的适配器类中的代码如何?这不正常吗? – Jas
当按下contactHolder.button时,应用程序崩溃,其余部分正在工作,所有其他数据都与按钮一起完美显示。 –
发布您的崩溃日志 – Jas