我的应用流程存在问题。
我的一个片段中有一个ListView。 我们已经创建了一个自定义适配器来使用JSON填充来自Web服务的数据。 (扩展了BaseAdapter)
当我设置OnClick时,它还有其他组件,如EditText和按钮。
我们创建了OnClickListerner(),它可以正确处理数据。但是,我希望在同一行中获得下一个元素。位置值给出错误的行对象。
我写的示例代码实现了这一点。请检查我是否在拨打电话时犯了错误。 (我正在从数组中正确地获取数据,但单独的对象是错误的)。
add_to_cart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
int p = position;
Integer pos = (Integer) arg0.getTag();
SKU_CODE = data.get(pos).get("sku_code");
SKU_NAME = data.get(pos).get("sku_name");
sp = PreferenceManager.getDefaultSharedPreferences(activity);
LOGGED = sp.getBoolean("LOGGED", false);
USER_ID = sp.getString("USER_ID", "");
STORE_CODE = sp.getString("STORE_CODE", "985");
url = "http://foodworld.in/android-api/add_item_to_cart.php";
//Toast.makeText(activity, url, Toast.LENGTH_SHORT).show();
Log.d("add to cart ur: ", url);
add_to_cart.setVisibility(View.GONE);
//qty_change_row.setTag(pos);
qty_change_row.setVisibility(View.VISIBLE);
AddItemToShoppingCart newTask = new AddItemToShoppingCart(arg0, pos);
newTask.execute();
}
});
在该代码中,我们有" add_to_cart_row"。这是线性布局,我们在这里指的是id。我尝试设置可见性,但它没有工作;它设置了错误的对象(屏幕中其他行中的对象)。
在附带的屏幕截图中,我点击了第一个产品的“添加到购物车”按钮。它启用了最后一行中的元素(+ - 文本框)。
这是我的问题。请帮帮我。
答案 0 :(得分:0)
首先,
我对Integer pos = (Integer) arg0.getTag();
pos有疑问,因为适配器' getView()
返回回收视图,因此您可能会得到错误的数据位置,
因此,您可以使用int p = position;
像,
int p = position;
SKU_CODE = data.get(p).get("sku_code");
SKU_NAME = data.get(p).get("sku_name");
第二次使用if - else add_to_cart
可见性。
像,
if(//Some condition)
{
add_to_cart.setVisibility(View.GONE);
qty_change_row.setVisibility(View.VISIBLE);
}
else
{
add_to_cart.setVisibility(View.VISIBLE);
qty_change_row.setVisibility(View.GONE);
}
答案 1 :(得分:0)
用setOnItemClickListener替换onClick。
示例:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
...
}
});
您可以通过以下方式从列表视图中获取价值或位置:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
QuestionItem questionItem = (QuestionItem)parent.getItemAtPosition(position);
if(questionItem.id == 1){
//do something
}
if(position == 2){
// do something
}
}
});
QuestionItem是ListAdapter的对象:
private class QuestionItem{
private int id;
public QuestionItem(int id){
this.id = id;
}
}