我正在开发一个应用程序,它从Web服务获取一些数据并显示在列表视图中。我已经实现了一个由BaseAdapter扩展的自定义适配器。在getView()
方法中,我也对原始进行了膨胀..这些都是完美的。
我的问题是我已经实现了代码,当用户单击列表项时显示一个对话框,但现在我想显示另一个对话框,其中有一个自定义列表(当点击是按钮时)。我还想在listview中显示一些数据。 [我有一个填充了我想要的数据的ArrayList]。我在我的适配器类中编写代码。任何人都可以告诉我如何做到这一点?
这是我的代码:
public class NewsRowAdapter extends BaseAdapter {
private Context mContext;
private Activity activity;
private static LayoutInflater inflater=null;
private ArrayList<HashMap<String, String>> data;
int resource;
//String response;
//Context context;
//Initialize adapter
public NewsRowAdapter(Context ctx,Activity act, int resource,ArrayList<HashMap<String, String>> d) {
super();
this.resource=resource;
this.data = d;
this.activity = act;
this.mContext = ctx;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void dialogshow(final String Date,final String Start,final String End){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity);
alertDialogBuilder.setTitle("Confirm your Action!");
// set dialog message
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
//MainActivity.this.finish();
// Toast.makeText(mContext, "Yes clicked", Toast.LENGTH_LONG).show();
//check similer records
// ShortList sh = new ShortList();
// ArrayList<HashMap<String, String>> duplicateList;
// duplicateList=sh.getDuplicated(Date, Start, End);
//if duplicates > 1 then show the popup list
// if(duplicateList.size()>1){
AlertDialog.Builder alertDialogBuilder2 = new AlertDialog.Builder(activity);
LayoutInflater infl = activity.getLayoutInflater();
//View vi = infl.inflate(id, root)
alertDialogBuilder2.setView(infl.inflate(R.layout.dialog_row, null))
.setPositiveButton("Accept", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(mContext, "Accepted", Toast.LENGTH_LONG).show();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
alertDialogBuilder2.show();
// }
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
alertDialogBuilder.show();
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
View vi = convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.row,null);
final TextView firstname = (TextView) vi.findViewById(R.id.fname);
final TextView lastname = (TextView) vi.findViewById(R.id.lname);
final TextView startTime = (TextView) vi.findViewById(R.id.stime);
final TextView endTime = (TextView) vi.findViewById(R.id.etime);
final TextView date = (TextView) vi.findViewById(R.id.blank);
final ImageView img = (ImageView) vi.findViewById(R.id.list_image);
HashMap<String, String> song = new HashMap<String, String>();
song =data.get(position);
firstname.setText(song.get(MainActivity.TAG_PROP_FNAME));
lastname.setText(song.get(MainActivity.TAG_PROP_LNAME));
startTime.setText(song.get(MainActivity.TAG_STIME));
endTime.setText(song.get(MainActivity.TAG_ETIME));
date.setText(song.get(MainActivity.TAG_DATE));
//imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), img);
Button accept = (Button) vi.findViewById(R.id.button1);
accept.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final int x = (int) getItemId(position);
/*Intent zoom=new Intent(mContext, Profile.class);
zoom.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
zoom.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(zoom);*/
// get the intent from the hashmap check if there is similar date and time.
//then store them in a list or array.
String getDate = (String) date.getText();
String getStartTime = startTime.getText().toString();
String getEndTime = endTime.getText().toString();
dialogshow(getDate,getStartTime,getEndTime);
}
});
vi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String getFname = firstname.getText().toString();
Toast.makeText(parent.getContext(), "view clicked: "+getFname , Toast.LENGTH_SHORT).show();
//get the id of the view
//check the id of the request
//call the web service acording to the id
Intent zoom=new Intent(parent.getContext(), Profile.class);
parent.getContext().startActivity(zoom);
}
});
return vi;
}
答案 0 :(得分:3)
你是在正确的轨道上,这是我用来动态显示一个带有项目列表的对话框。
作为参考,此处提出了类似的问题:Android custom list dialog
//String[] list_data; Preloaded with a String array
final CharSequence[] items = new CharSequence[list_data.length];
for (int i = 0; i < list_data.length; i++) {
items[i] = list_data[i];
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select the data you want");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Get the id of the item
diag_callback();
}
});
AlertDialog alert = builder.create();
alert.show();
}
public void diag_callback() {
//Do someting when the user has made his selection
}
希望这可以解决你的问题。
答案 1 :(得分:0)
为了您的关注,我希望您知道创建自定义列表视图。
使用包含带有自定义列表视图的自定义对话框的下述代码。我希望你可以通过你的
执行适配器和模型部分 final Dialog new_dialog = new Dialog(getParent());
new_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
new_dialog.setContentView(R.layout.customize_dialog_list_view);
new_dialog.setCancelable(false);
cuc = new CommanUtilityClass();
SharedPreferences sp = getSharedPreferences("provider",0);
String services = sp.getString("services","");
Log.i("Servicesss",bAllServices);
TextView service = (TextView) new_dialog.findViewById(R.id.cdlv_service_provider);
TextView hour = (TextView) new_dialog.findViewById(R.id.cdlv_working_hours);
TextView appointment_time = (TextView) new_dialog.findViewById(R.id.cdlv_appoint_time);
TextView appointment_date = (TextView) new_dialog.findViewById(R.id.cdlv_appoint_date);
String[] ampm = myTiming[which].split(":");
Log.d("xxxooo", ampm[0]);
appointment_time.setText(Html.fromHtml("<b>Appointment time :</b>" + myTimingToShow[which].split("/")[0]));
appointment_date.setText(Html.fromHtml("<b>Appointment date :</b>" + selected));
service.setText(Html.fromHtml("<b>Service provider :</b>"+ cuc.toTheUpperCase(bsp_name)));
hour.setText(Html.fromHtml("<b>Working hours :</b>"+ cuc.toTheUpperCase(bsp_availability)));
lv = (ListView) new_dialog.findViewById(R.id.cdlv_list);
CustomDialogArrayAdapter cdaa = new CustomDialogArrayAdapter(getApplicationContext(),m_ArrayList);
lv.setAdapter(cdaa);
new_dialog.show();
ImageButton btn_cdlv_cancel = (ImageButton) new_dialog.findViewById(R.id.cdlv_cancel);
btn_cdlv_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new_dialog.dismiss();
}
});
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(
AdapterView<?> arg0,
View arg1,
int arg2,
long arg3) {
Log.d("checkforbookedslots", booked_slots);
final_time_selected = myTiming[which];
String final_duration = m_ArrayList.get(arg2).provider_service_duration;
Log.d("adiadicheck", check_for_booking_list);
if (checkOverlapSlot(final_time_selected,final_duration)) {
Log.d("gp","seven12aa");
SharedPreferences sp = getSharedPreferences("booking_detail",0);
SharedPreferences.Editor editor = sp.edit();
editor.putString("provider_service",m_ArrayList.get(arg2).provider_service);
editor.putString("provider_service_duration",m_ArrayList.get(arg2).provider_service_duration);
editor.putString("provider_service_price",m_ArrayList.get(arg2).provider_service_price);
editor.putString("service_id",m_ArrayList.get(arg2).provider_service_id);
editor.commit();
SessionManagement sm = new SessionManagement(getParent());
// sm.checkLogin();
if (sm.isLoggedIn()) {
Log.d("viv2","1");
Intent edit = new Intent(SelectedService.this,UserLoggedActivity.class);
TabGroupActivity parentActivity = (TabGroupActivity) getParent();
parentActivity.startChildActivity("UserLoggedActivity",edit);
} else {
Log.d("viv2","2");
Intent edit = new Intent(SelectedService.this,UserNoLoggedActivity.class);
TabGroupActivity parentActivity = (TabGroupActivity) getParent();
parentActivity.startChildActivity("UserNoLoggedActivity",edit);
}
new_dialog.dismiss();
}
}
});
答案 2 :(得分:0)
CUSTOM DIALOG BOX WITH CUSTOM LISTVIEW ::: 公共类MainActivity扩展了Activity {
private Button btnOpenDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayList<String> strArrlst = new ArrayList<String>();
for (int i = 0; i < 15; i++) {
strArrlst.add("Number: " + i);
}
btnOpenDialog = (Button) findViewById(R.id.btn_open_dialog);
btnOpenDialog.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("Dialog box is btn click", "");
final Dialog dialog = new Dialog(MainActivity.this);
Toast.makeText(getApplicationContext(), "btn is click", Toast.LENGTH_SHORT).show();
// tell the Dialog to use the dialog.xml as it's layout
// description
dialog.setContentView(R.layout.custom_dailog_box);
dialog.setTitle("Android Custom Dialog Box");
TextView txt = (TextView) dialog.findViewById(R.id.txt);
txt.setText("This is an Android custom Dialog Box Example! Enjoy!");
ListView dialogLIst = (ListView) dialog.findViewById(R.id.lstvw_open_custom_dialog);
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
// android.R.layout.simple_list_item_1, android.R.id.text1,
// values);
// dialogLIst.setAdapter(adapter);
AdapterListC adapListC = new AdapterListC(getApplicationContext(), strArrlst);
dialogLIst.setAdapter(adapListC);
dialogLIst.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
dialog.dismiss();
Toast.makeText(getApplicationContext(), "This is click position is" + position, Toast.LENGTH_SHORT).show();
}
});
dialog.show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
ADAPTER CLASS ::: 公共类AdapterListC扩展BaseAdapter {
public AdapterListC(Context context_, ArrayList<String> arrlstString) {
super();
this.context_ = context_;
this.arrlstString = arrlstString;
mInflater = (LayoutInflater) context_.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
Context context_;
ArrayList<String> arrlstString;
private LayoutInflater mInflater;
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrlstString.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrlstString.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Viewolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listitem, null);
holder = new Viewolder();
holder.txtName = (TextView) convertView.findViewById(R.id.txt_listitem);
convertView.setTag(holder);
} else {
holder = (Viewolder) convertView.getTag();
}
holder.txtName.setText(arrlstString.get(position).toString());
return convertView;
}
class Viewolder {
TextView txtName;
}
}