Android 单击按钮删除Listview行
我有一个列表视图,可以获取美联储的问题及其相应的选择: 下面的构造函数获取所有必要的信息以提供Listview。所有字符串值都在ArrayList中Android 单击按钮删除Listview行,android,listview,Android,Listview,我有一个列表视图,可以获取美联储的问题及其相应的选择: 下面的构造函数获取所有必要的信息以提供Listview。所有字符串值都在ArrayList中 public BaseQuestionAdapter(Activity a, ArrayList<String> b, ArrayList<String> c, ArrayList<String> d, ArrayList<String> e) { activity = a;
public BaseQuestionAdapter(Activity a, ArrayList<String> b, ArrayList<String> c, ArrayList<String> d, ArrayList<String> e) {
activity = a;
this.questionTitleArray = b;
this.choicesArray = c;
this.questionIdArray = d;
this.userIdArray = e;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
问题是,我不知道为了实现这一点,应该准确地引用什么。不知道这是choicesArray还是我收到的任何其他资源。目前,当我长时间点击一个按钮时,什么也没发生。有没有关于我错在哪里的线索?谢谢。正如Luksprog在评论中所说的,您需要从getCount中引用的容器中删除项目。然而,我也希望提供一个改进。不要使用四个不同的字符串列表,而是使用一个包含每个字符串的对象 例如
拥有此类后,可以使用包含对象的单个列表。这样,您就不会混淆哪些列表项应该被删除才能更改列表。问题是,我不知道为了更改列表,应该准确地引用什么。-您需要引用适配器所基于的列表。在没有看到适配器的getCount方法的情况下,我假设列表是questionTitleArray。@Luksprog但如何在BaseAdapter中引用该列表?当BaseAdapter通过httpAsync调用进行调用和处理时,该列表将在另一个线程中实例化。创建它的位置无关紧要。要更改适配器删除行,需要更改适配器所基于的列表。我不知道当您将所有列表传递给适配器时,您在想什么参考。您是否尝试在适配器的getCount方法中使用的列表上调用长单击侦听器?
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
vi = inflater.inflate(R.layout.question_layout, null);
LinearLayout questionContainer = (LinearLayout) vi.findViewById(R.id.question_container);
LinearLayout choicesContainer = (LinearLayout) vi.findViewById(R.id.choices_container);
ViewGroup answersContainerParent = (ViewGroup) choicesContainer.getParent();
if (answersContainerParent != null)
answersContainerParent.removeView(choicesContainer);
JSONArray choicesJSONArray = new JSONArray(choicesArray);
try {
String bhb = choicesJSONArray.get(position).toString();
jsnArray = new JSONArray(bhb);
} catch (JSONException e) {
e.printStackTrace();
}
for (int answersArrayIterator = 0; answersArrayIterator < jsnArray.length(); answersArrayIterator++) {
try {
final Button choiceButton = new Button(activity);
choiceButton.setId(buttonId);
String questionId = questionIdArray.get(position).toString();
choiceButton.setTag(questionId);
choiceButton.setTag(position);
ViewGroup layout = (ViewGroup) choiceButton.getParent();
if (layout != null)
layout.removeView(choiceButton);
choiceButton.setText(jsnArray.get(answersArrayIterator).toString());
choiceButton.setTextSize(16);
choiceButton.setBackgroundResource(R.drawable.question_button_template_style);
choiceButton.setGravity(Gravity.CENTER);
choiceButton.setWidth(270);
choiceButton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
String choiceString = choiceButton.getText().toString();
Object questionId = choiceButton.getTag();
setDataToBeSent(userId, questionId, choiceString);
Integer index = (Integer) v.getTag();
System.out.println("SATURN ASCENDS: " + index);
choicesArray.remove(index);
notifyDataSetChanged();
new HttpAsyncTask2().execute();
return false;
}
});
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(10, 10, 10, 10);
choiceButton.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
choiceButton.setLayoutParams(params);
buttonId++;
choicesContainer.addView(choiceButton);
} catch (JSONException e) {
e.printStackTrace();
}
}
TextView questionTitleET = (TextView) vi.findViewById(R.id.question_title);
String questionTitle = questionTitleArray.get(position).toString();
questionTitleET.setText(questionTitle);
ViewGroup questionTitleETParent = (ViewGroup) questionTitleET.getParent();
if (questionTitleETParent != null)
questionTitleETParent.removeView(questionTitleET);
questionContainer.addView(questionTitleET);
questionContainer.addView(choicesContainer);
return vi;
}
choiceButton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Integer index = (Integer) v.getTag();
System.out.println("SATURN ASCENDS: " + index);
choicesArray.remove(index);
notifyDataSetChanged();
return false;
}
});
public class MyClass {
public String questionTitle;
public String choice;
public String questionId;
public String userId;
}