gpt4 book ai didi

java - ListView 更新单行

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:43 24 4
gpt4 key购买 nike

我想在按下按钮后用不同的内容更新 ListView 中的一行。我知道我可以使用 notifydatasetchanged() 但这会更新整个 listView

我读过这个answer它非常适合我想做的事情。

我做了一个包含 5 行的 ListView ,当我按下按钮时,我想用不同的文本更新第 4 行。我不想以编程方式设置文本,因为这只是一个虚拟项目,只是为了查看是否可以刷新单行,而我的真实项目比 textview 复杂得多。

所以我的问题是:我可以使用 getView() 来更新 listview 中的单行吗?

这是我的代码:

我的 Activity :

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);

}
});

}

}

我的适配器:

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;
}

}

这是 Activity 的样子:

Activity snapshot

但是当我按下我的按钮时没有任何变化

最佳答案

不能自己调用适配器的getView()方法。适配器的 getView() 方法仅在以下情况下被调用

  • ListView 已创建
  • 当用户滚动 ListView 时
  • 调用 notifysetdatachanged() 时。
    所有这些都是由操作系统完成的。为 ListView 中的所有行调用 GetView()。它不只是一行。因此,如果您想更改行,则必须在 String[] 中再次提供数据。 , ArrayList<>等等
    如果你想为单行显示不同的文本,一个按钮的 onClick() - 你可以这样做

    公共(public)类 listAdapter 扩展了 BaseAdapter{

    public Activity activity;
    public ArrayList<String> text;

    public listAdapter(Activity activity){

    this.activity = activity;
    }

    public void setText(ArrayList<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[position]);
    return rowView;
    }

    }
    在你的 Activity 中:

    list1 = (ListView) findViewById(R.id.my_list);
    adapter = new listAdapter(this);
    String[] entries={"Normal Text","Normal Text","Normal Text","Normal text","Normal text"};
    ArrayList<String> text=Arrays.asList(entries);
    adapter.setText(text);
    list1.setAdapter(adapter);

    Button button1 = (Button) findViewById(R.id.my_button);
    button1.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
    text.set(3,"Different Text");
    adapter.setText(text);
    list1.setAdapter(adapter);

    }
    });


    还有另一种方法,正如@Andy 在其中一条评论中所建议的那样:

    listViewPeople.setOnItemClickListener(new ListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int position, long l) {
    //IF YOU WANT TO CHANGE THE CONTENT OF THE ROW CLICKED
    if(position == someNumber) {
    text.set(position,"different Text");
    list1.setAdapter(text);
    }
    }
    });

抱歉粗体字。出于某种原因,CTRL+K 不适用于上述代码。

关于java - ListView 更新单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13327459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com