Tôi muốn cập nhật một hàng trong danh sách xem của mình với nội dung khác nhau khi tôi nhấn một nút. Tôi biết tôi có thể sử dụng notifydatasetchanged(
) nhưng điều đó sẽ cập nhật toàn bộ listView
.ListView Đang cập nhật một hàng
Tôi đã đọc số này answer và nó phù hợp hoàn hảo với những gì tôi muốn làm.
Tôi đã thực hiện chế độ xem danh sách với 5 hàng và khi tôi nhấn nút, tôi muốn cập nhật hàng thứ 4 bằng một văn bản khác. Tôi không muốn thiết lập các văn bản programatically vì đây chỉ là một dự án giả chỉ để xem nếu làm mới một hàng duy nhất là có thể và dự án thực sự của tôi là phức tạp hơn nhiều so với chỉ là một textview
.
Vì vậy, câu hỏi của tôi là: tôi có thể sử dụng getView()
để cập nhật một hàng trong một listview
không?
Đây là mã của tôi:
Hoạt động của tôi:
public class MainActivity extends Activity {
public ListView list1;
public listAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list1 = (ListView) findViewById(R.id.my_list);
adapter = new listAdapter(this);
list1.setAdapter(adapter);
Button button1 = (Button) findViewById(R.id.my_button);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
adapter.setText("Different text");
View row2Update = list1.getChildAt(3);
list1.getAdapter().getView(3, row2Update, list1);
}
});
}
}
bộ chuyển đổi của tôi:
public class listAdapter extends BaseAdapter{
public Activity activity;
public String text="Normal Text";
public listAdapter(Activity activity){
this.activity = activity;
}
public void setText(String text){
this.text = text;
}
public int getCount() {
return 5;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = activity.getLayoutInflater();
LinearLayout rowView = (LinearLayout) inflater.inflate(R.layout.row_layout, null);
TextView textView = (TextView) rowView.findViewById(R.id.row_text);
textView.setText(text);
return rowView;
}
}
Đây là những gì hoạt động trông giống như:
Nhưng khi tôi nhấn nút của tôi có gì thay đổi
Câu trả lời hay. Tôi đồng ý với bạn. Một điều khác anh ta có thể làm là chỉ cần đặt onItemClickListener vào chính ListView, và nếu vị trí là bất cứ điều gì (giả sử bạn không sử dụng một nút), bạn chỉ cần cập nhật danh sách trong bộ điều hợp. Tất nhiên cuối cùng anh ta cần phải tìm ra tùy chọn nào là tốt nhất cho anh ta. – Andy
@Andy: Bạn nói đúng. Trên thực tế đó sẽ là ý tưởng tốt hơn. Nhưng kể từ đó, ông đặc biệt yêu cầu thay đổi nội dung hàng trên một nút bấm, tôi đã đi cho điều này. – Ashwin
:) Ồ không, bạn đúng về mặt kỹ thuật @Ashwin chỉ vì nó hiệu quả hơn. Không có bất kỳ công việc không cần thiết nào đang được thực hiện. Vì anh ấy chỉ muốn cập nhật một dòng. Nhưng anh ấy đề cập rằng đây chỉ là một bài kiểm tra, vì vậy tôi nghĩ anh ấy cũng nên có một phương pháp khác trong trường hợp anh ấy muốn nhiều hơn để được cập nhật. – Andy