Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新listView行的文本_Java_Android_Listview_Android Arrayadapter - Fatal编程技术网

Java 更新listView行的文本

Java 更新listView行的文本,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,我希望在单击行(或任何事件)后更新我的listView,但让我们关注单击 我做了一些事情,但它更新了不止一行(也许它会更新第一个可见行和最后一个可见行之后的行…)。 这是完整的代码 活动代码 DatabaseHandler colisageBase; ListView listView; List<Site> sites; String id_tournee; SiteAdapter siteAdapter; @Override protected void onCreate(Bu

我希望在单击行(或任何事件)后更新我的listView,但让我们关注单击

我做了一些事情,但它更新了不止一行(也许它会更新第一个可见行和最后一个可见行之后的行…)。 这是完整的代码

活动代码

DatabaseHandler colisageBase;
ListView listView;
List<Site> sites;
String id_tournee;
SiteAdapter siteAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_site_choice);
    Intent intent = getIntent();
    id_tournee = intent.getStringExtra("idTourneeSelectionnee");
    this.listView = findViewById(R.id.list_view_site);
    this.colisageBase = new DatabaseHandler(this);
    sites = colisageBase.selectAllSite(id_tournee);
    siteAdapter = new SiteAdapter(SiteChoiceActivity.this, sites);
    listView.setAdapter(siteAdapter);
    colisageBase.closeDB();

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Site selectedSite = sites.get(position);
            selectedSite.setIsBarred(true);
            sites.set(position, selectedSite);
            siteAdapter.notifyDataSetChanged();
            //goToOperationActivity(selectedSite.SiteOut());
        }
    });
public class SiteAdapter extends ArrayAdapter<Site> {

public SiteAdapter(Context context, List<Site> sites) {
    super(context, 0, sites);
}

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

    if(convertView == null){
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_site,parent, false);
    }

    SiteViewHolder viewHolder = (SiteViewHolder) convertView.getTag();
    if(viewHolder == null){
        viewHolder = new SiteViewHolder();
        viewHolder.heure_supposee = convertView.findViewById(R.id.heure_supposee);
        viewHolder.libelle_site = convertView.findViewById(R.id.libelle_site);
        viewHolder.logo_telephone = convertView.findViewById(R.id.logo_phone);
        convertView.setTag(viewHolder);
    }

    Site site = getItem(position);

    viewHolder.heure_supposee.setText(site.getHeure_supposee());
    viewHolder.libelle_site.setText(site.getLibelle_site());
    viewHolder.logo_telephone.setVisibility(View.INVISIBLE);
    if (site.getSur_appel().equals("O")) viewHolder.logo_telephone.setVisibility(View.VISIBLE);
    if (site.isBarred()) viewHolder.libelle_site.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);

    return convertView;
}

@Override
public void notifyDataSetChanged()
{
    super.notifyDataSetChanged();
}

private class SiteViewHolder{
    public TextView heure_supposee;
    public TextView libelle_site;
    public ImageView logo_telephone;
}
DatabaseHandler;
列表视图列表视图;
列出地点;
字符串id_tournee;
站点适配器站点适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u site\u choice);
Intent=getIntent();
id_tournee=intent.getStringExtra(“idtourneselectionnee”);
this.listView=findviewbyd(R.id.list\u view\u site);
this.colisageBase=新数据库处理程序(this);
sites=colisageBase。选择AllSite(id\u tournee);
siteAdapter=新的siteAdapter(SiteChoiceActivity.this,sites);
setAdapter(siteAdapter);
colisageBase.closeDB();
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Site selectedSite=sites.get(位置);
selectedSite.setIsBarred(true);
地点。设置(位置,所选地点);
siteAdapter.notifyDataSetChanged();
//goToOperationActivity(selectedSite.SiteOut());
}
});
适配器代码

DatabaseHandler colisageBase;
ListView listView;
List<Site> sites;
String id_tournee;
SiteAdapter siteAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_site_choice);
    Intent intent = getIntent();
    id_tournee = intent.getStringExtra("idTourneeSelectionnee");
    this.listView = findViewById(R.id.list_view_site);
    this.colisageBase = new DatabaseHandler(this);
    sites = colisageBase.selectAllSite(id_tournee);
    siteAdapter = new SiteAdapter(SiteChoiceActivity.this, sites);
    listView.setAdapter(siteAdapter);
    colisageBase.closeDB();

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Site selectedSite = sites.get(position);
            selectedSite.setIsBarred(true);
            sites.set(position, selectedSite);
            siteAdapter.notifyDataSetChanged();
            //goToOperationActivity(selectedSite.SiteOut());
        }
    });
public class SiteAdapter extends ArrayAdapter<Site> {

public SiteAdapter(Context context, List<Site> sites) {
    super(context, 0, sites);
}

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

    if(convertView == null){
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_site,parent, false);
    }

    SiteViewHolder viewHolder = (SiteViewHolder) convertView.getTag();
    if(viewHolder == null){
        viewHolder = new SiteViewHolder();
        viewHolder.heure_supposee = convertView.findViewById(R.id.heure_supposee);
        viewHolder.libelle_site = convertView.findViewById(R.id.libelle_site);
        viewHolder.logo_telephone = convertView.findViewById(R.id.logo_phone);
        convertView.setTag(viewHolder);
    }

    Site site = getItem(position);

    viewHolder.heure_supposee.setText(site.getHeure_supposee());
    viewHolder.libelle_site.setText(site.getLibelle_site());
    viewHolder.logo_telephone.setVisibility(View.INVISIBLE);
    if (site.getSur_appel().equals("O")) viewHolder.logo_telephone.setVisibility(View.VISIBLE);
    if (site.isBarred()) viewHolder.libelle_site.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);

    return convertView;
}

@Override
public void notifyDataSetChanged()
{
    super.notifyDataSetChanged();
}

private class SiteViewHolder{
    public TextView heure_supposee;
    public TextView libelle_site;
    public ImageView logo_telephone;
}
公共类SiteAdapter扩展了ArrayAdapter{
公共站点适配器(上下文、列表站点){
超级(上下文,0,站点);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=LayoutInflater.from(getContext()).flate(R.layout.row\u site,parent,false);
}
SiteViewHolder viewHolder=(SiteViewHolder)convertView.getTag();
if(viewHolder==null){
viewHolder=新站点viewHolder();
viewHolder.heure_假定=convertView.findViewById(R.id.heure_假定);
viewHolder.libelle_site=convertView.findViewById(R.id.libelle_site);
viewHolder.logo\u phone=convertView.findViewById(R.id.logo\u phone);
convertView.setTag(viewHolder);
}
站点站点=获取项目(位置);
viewHolder.heure_-aspectee.setText(site.getHeure_-aspectee());
viewHolder.libelle_site.setText(site.getLibelle_site());
viewHolder.logo_phone.setVisibility(视图.不可见);
if(site.getSur_appel().equals(“O”))viewHolder.logo_telephone.setVisibility(View.VISIBLE);
if(site.isBarred())viewHolder.libelle\u site.setPaintFlags(Paint.STRIKE\u THRU\u TEXT\u FLAG);
返回视图;
}
@凌驾
public void notifyDataSetChanged()
{
super.notifyDataSetChanged();
}
私有类SiteViewHolder{
公共文本视图;
公共文本视图诽谤网站;
公共图像视图标志(电话);;
}
}


请说明代码有什么问题。

答案在I______Mok的评论中给出,但我必须补充更多细节:

对于单元格,当您在“如果”条件下执行操作时,通常必须在“其他”条件下执行相反的操作

在我的例子中,在我划过文本的条件之后,我必须添加一个不划过文本的else条件

if (site.isBarred()){
        viewHolder.libelle_site.setPaintFlags(viewHolder.libelle_site.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
    }else {
        viewHolder.libelle_site.setPaintFlags(viewHolder.libelle_site.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
    }

发布完整的代码SiteAdapter和活动请:你应该使用recyclerview和recyclerview adapter我只写了完整的代码,我不知道recyclerview adapter是如何工作的,我将阅读更多关于它的内容,你有任何与主题相关的链接吗?试试这个:在onclick站点中。get(position)。setIsBarred(true);SiteAdapter.notifyDataSetChanged()它仍然不起作用