0

私はこれを約2週間は把握しようとしていますが、運は全くありません。 を使用して確認メッセージをonClickListenerに追加しようとしています.AlertDialogのsetPositiveButtonは、実行したいことを実行するものになりますが、getViewに値int positionを詰め込みます。クリックしたアイテムの位置を取得する代わりに、最後のアイテムの位置を取得します。私はonClickAlertDialogの中のの中にToastメッセージを入れて試してみましたが、それは正しい位置を返しますが、の中のToastメッセージにしようとすると位置の値が変わります。私は立ち往生し、この仕事をする方法をしないでください。 私は値が変化しているかどうかを確認するためにbuilder.setPositiveButtonButton.onClickListenerようToastメッセージを同じように設定して、はい、それは、変更を行います。Button.onClick内でAlertDialogを使用すると、ArrayAdapterのgetView(int position)の値が壊れます

は、ここに私のAdapter.Class

public class myOrderAdapter extends ArrayAdapter<myOrder> { 

    AlertDialog.Builder builder; 
    AlertDialog ad; 

    public class ViewHolder{ 
     TextView tableNum; 
     TextView itemName; 
     TextView itemQuantity; 
     TextView custName; 
     Button btnStatus; 
    } 

    public myOrderAdapter(Context context, ArrayList<myOrder> orderList) { 
     super(context, 0,orderList); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     final myOrder orderList = getItem(position); 

     ViewHolder viewHolder; 
     viewHolder = new ViewHolder(); 

     if(convertView == null){ 

      convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_layout,parent,false); 

      viewHolder.tableNum = (TextView)convertView.findViewById(R.id.tableNum); 
      viewHolder.itemName = (TextView)convertView.findViewById(R.id.itemName); 
      viewHolder.custName = (TextView)convertView.findViewById(R.id.custName); 
      viewHolder.itemQuantity = (TextView)convertView.findViewById(R.id.itemQuantity); 
      viewHolder.btnStatus = (Button)convertView.findViewById(R.id.statusButton); 

      convertView.setTag(viewHolder); 

     } 

     else { 
      viewHolder = (ViewHolder)convertView.getTag(); 
     } 

     viewHolder.tableNum.setText("Order for Table: "+orderList.getTable_id()); 
     viewHolder.itemName.setText(orderList.getItem_name()); 
     viewHolder.custName.setText("Customer Name: " + orderList.getCust_name()); 
     viewHolder.itemQuantity.setText("QTY: " + orderList.getQuantity()); 


     builder = new AlertDialog.Builder(Order.context); 
     builder.setTitle("Confirmation"); 
     builder.setIcon(R.drawable.ic_confirm); 
     builder.setMessage("Is this Ready to Serve?"); 


     builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       Toast.makeText(getContext(),orderList.getOrder_id()+ "+" + orderList.getItem_name() + "+" + position,Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       dialogInterface.dismiss(); 
      } 
     }); 


     ad = builder.create(); 

     viewHolder.btnStatus.setText("Ready"); 
     viewHolder.btnStatus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(getContext(),orderList.getOrder_id()+ "+" + orderList.getItem_name() + "+" + position,Toast.LENGTH_SHORT).show(); 
       ad.show(); 
      } 
     }); 


     return convertView; 
    } 


} 

NOTEです。いくつかの助けと指導が必要です、ありがとう。

答えて

1

ここでの問題は、最後のビュー(最後のアイテム)で作成されたすべてのビューに対してAlertDialogを作成していることです。これは、アイテムリストの最後のインデックスになる理由です。以下のようなものを試してください。これは、ビューの1つからボタンをクリックするとダイアログを作成するだけです。

public class myOrderAdapter extends ArrayAdapter<myOrder> { 

public class ViewHolder{ 
    TextView tableNum; 
    TextView itemName; 
    TextView itemQuantity; 
    TextView custName; 
    Button btnStatus; 
} 

public myOrderAdapter(Context context, ArrayList<myOrder> orderList) { 
    super(context, 0,orderList); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    final myOrder orderList = getItem(position); 

    ViewHolder viewHolder; 
    viewHolder = new ViewHolder(); 

    if(convertView == null){ 

     convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_layout,parent,false); 

     viewHolder.tableNum = (TextView)convertView.findViewById(R.id.tableNum); 
     viewHolder.itemName = (TextView)convertView.findViewById(R.id.itemName); 
     viewHolder.custName = (TextView)convertView.findViewById(R.id.custName); 
     viewHolder.itemQuantity = (TextView)convertView.findViewById(R.id.itemQuantity); 
     viewHolder.btnStatus = (Button)convertView.findViewById(R.id.statusButton); 

     convertView.setTag(viewHolder); 

    } 

    else { 
     viewHolder = (ViewHolder)convertView.getTag(); 
    } 

    viewHolder.tableNum.setText("Order for Table: "+orderList.getTable_id()); 
    viewHolder.itemName.setText(orderList.getItem_name()); 
    viewHolder.custName.setText("Customer Name: " + orderList.getCust_name()); 
    viewHolder.itemQuantity.setText("QTY: " + orderList.getQuantity()); 


    viewHolder.btnStatus.setText("Ready"); 
    viewHolder.btnStatus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(getContext(),orderList.getOrder_id()+ "+" + orderList.getItem_name() + "+" + position,Toast.LENGTH_SHORT).show(); 
      createDialog(position); 
     } 
    }); 


    return convertView; 
} 

private void createDialog(final int position) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
    builder.setTitle("Confirmation " + position); 
    builder.setIcon(R.drawable.pencil); 
    builder.setMessage("Is this Ready to Serve? " + position); 


    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      Toast.makeText(getContext(),orderList.getOrder_id()+ "+" + orderList.getItem_name() + "+" + position, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      dialogInterface.dismiss(); 
     } 
    }); 

    builder.create().show(); 
} 
} 
+0

答えがあなたに役立つ場合は、それを忘れずにマークしてください –