Android 在自定义列表视图中使用自定义对话框按钮单击
我正在从事一个android项目,在这个项目中,我必须从服务器获取数据,并将其与一个按钮一起显示在自定义listview中。我已经获取并显示了listview,但每当单击listview每一行中的按钮时,我想启动一个对话框。我不知道如何通过按键启动呼叫,我已经尝试了一些方法,但都不起作用。。我的代码粘贴在下面,任何帮助都将不胜感激 我的代码的contactAdapter类如下所示:Android 在自定义列表视图中使用自定义对话框按钮单击,android,Android,我正在从事一个android项目,在这个项目中,我必须从服务器获取数据,并将其与一个按钮一起显示在自定义listview中。我已经获取并显示了listview,但每当单击listview每一行中的按钮时,我想启动一个对话框。我不知道如何通过按键启动呼叫,我已经尝试了一些方法,但都不起作用。。我的代码粘贴在下面,任何帮助都将不胜感激 我的代码的contactAdapter类如下所示: package com.example.sohan.doctor; import android.app.Act
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();
}
}
试试这个:
根据需要自定义警报
contactHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder alertbox = new AlertDialog.Builder(v.getRootView().getContext());
alertbox.setMessage("Message");
alertbox.setTitle("Title");
alertbox.setIcon(R.drawable.img);
alertbox.setPositiveButton("Send Treatment",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0,
int arg1) {
}
});
alertbox.show();
}
});
mList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
showDialog();
}
});
私有void showDialog()
{
AlertDialog.Builder=
新建AlertDialog.Builder(this,R.style.AppCompatAlertDialogStyle);
建造商名称(“无连接”);
setMessage(“检查您的互联网连接”);
setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
//在这里做
}
});
builder.show();
}
您可以使用listview项单击事件。并将其显示为弹出窗口。以下是如何创建自定义对话框的示例
public void showCustomDialog() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inf = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inf.inflate(R.layout.email_dialog, null);
builder.setView(view);
final EditText et = (EditText) view.findViewById(R.id.id_student_email_edittext);
final EditText nameEditText = (EditText) view.findViewById(R.id.id_student_name_edittext);
final RadioGroup radioGroup = (RadioGroup) view.findViewById(R.id.student_gender_group);
final RadioButton radiomale = (RadioButton) view.findViewById(R.id.gender_male);
final RadioButton radioFemale = (RadioButton) view.findViewById(R.id.gender_female);
builder.setPositiveButton("Ok", new OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//Click listner
}
});
builder.setNegativeButton("cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//click listner.
}
});
builder.show();
}
这是自定义对话框的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dip">
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/id_student_name_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Name"
android:inputType="textEmailAddress"
android:padding="10dip"
android:selectAllOnFocus="true" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/id_student_email_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email"
android:inputType="textEmailAddress"
android:padding="10dip"
android:selectAllOnFocus="true" />
</android.support.design.widget.TextInputLayout>
<RadioGroup
android:layout_marginTop="10dip"
android:id="@+id/student_gender_group"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/gender_male"
android:text="Male"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/gender_female"
android:text="Female"
android:layout_weight="1" />
</RadioGroup>
</LinearLayout>
只需在listview的McClick中调用该方法
按照我在java代码中展示的方式自定义布局并访问元素
callDialog cd = new callDialog();
请勿使用new创建FragmentActivity
使用意图。适配器类中的代码如何?这难道不起作用吗?当按下contactHolder.button时,应用程序崩溃,其余的东西都在工作,所有其他数据都与按钮一起完美地显示。发布你的崩溃日志这是可行的,但我有一个自定义对话框,我如何使用它??你上面的解决方案弹出一个窗口,我需要一些编辑文本和文本视图在alertbox中..Thnx它工作了,:-)它将是getContext().getSystemService(…)…这是因为我在活动类中,如果你在片段中,你可能必须使用getActivity()
callDialog cd = new callDialog();