2013-12-04 2 views
3

Я разрабатываю приложение, которое извлекает некоторые данные из веб-службы и отображается в виде списка. Я внедрил пользовательский адаптер, который расширяет BaseAdapter. В методе getView() я тоже раздуваю сырье. Те работают отлично.Как настроить представление пользовательского списка в диалоговом окне

Моя проблема заключается в том, что я реализовал код, чтобы показать диалоговое окно, когда пользователь нажимает элемент списка, но теперь я хочу показать другое диалоговое окно, в котором есть пользовательский список (когда нажата кнопка «Да»). Я также хочу показать некоторые данные в этом списке. [У меня есть 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; 


} 

ответ

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 
} 

Надеется, что это сортирует вашу проблему.

+0

привет .. здесь i есть вопрос ... так как я раздуваю свой собственный список в методе getview в классе адаптеров, как я могу напрямую устанавливать элементы? У меня есть мои данные: [{Date = 11/18/13, EndTime = 09: 00 AM, StartTime = 08: 00 AM}, {Date = 11/18/13, EndTime = 09: 00 AM, StartTime = 08: 00 AM}, {Date = 11/18/13, EndTime = 09: 00 AM, StartTime = 08: 00 AM}] Я хочу показать их в диалоговом окне (внутри списка) –

+0

Are вы используете SQLite? Если вы хотите, просто сохраните свои данные в базе данных и отредактируйте их с помощью запросов, таким образом вы всегда будете иметь прямой доступ к своим данным. Затем вы можете написать метод для обновления вашего представления, чтобы отразить новые данные в базе данных. – Mushroomzier

+0

Если вы не используете SQLite, подумайте о том, чтобы реализовать его в своем приложении. Вот ссылочный сайт, в котором есть большой учебник по SQLite для Android. Здесь (http://hmkcode.com/android-simple-sqlite-database-tutorial). – Mushroomzier

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(); 
     } 
    } 
    }); 
0

CUSTOM диалоговое окно с CUSTOM ListView ::: общественный класс MainActivity расширяет активность {

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 КЛАСС ::: общественного класса 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; 
} 

}

Смежные вопросы