Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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
Android 每次我滚动我不想要的内容时,ListView都会重新加载它的项目_Android_Listview - Fatal编程技术网

Android 每次我滚动我不想要的内容时,ListView都会重新加载它的项目

Android 每次我滚动我不想要的内容时,ListView都会重新加载它的项目,android,listview,Android,Listview,我在android中创建了一个列表视图,我想做一些事情,比如每次单击列表项时,它必须在红色和绿色之间切换颜色。我能够做到这一点,但问题是每次我向上或向下滚动listview时,它都会一次又一次地重新加载列表项,并且切换的颜色会丢失 我尝试使用一个切换按钮,而不仅仅是手动调整颜色,但即使这样也会失去它的状态。当用户单击它时,它将变为打开状态,当用户向上或向下滚动时,它将失去状态并显示关闭状态 这是我的MainActivity.java文件 package bk.acs; import andro

我在android中创建了一个列表视图,我想做一些事情,比如每次单击列表项时,它必须在红色和绿色之间切换颜色。我能够做到这一点,但问题是每次我向上或向下滚动listview时,它都会一次又一次地重新加载列表项,并且切换的颜色会丢失

我尝试使用一个切换按钮,而不仅仅是手动调整颜色,但即使这样也会失去它的状态。当用户单击它时,它将变为打开状态,当用户向上或向下滚动时,它将失去状态并显示关闭状态

这是我的MainActivity.java文件

package bk.acs;

import android.content.Context;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Arrays;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ListView listView;
        final String chars[] = new String[20];
        final int arr[]=new int[20];
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for(int i=0;i<20;i++)
        {
            chars[i]="15BEC058"+i;
        }
        Arrays.fill(arr,1);
        listView=(ListView)findViewById(R.id.row);
        MyAdapter adapter =new MyAdapter(this,chars);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {

            @Override
            public void onItemClick(AdapterView adapterView, View view, int i, long l) {
                arr[i]=(arr[i]==0)?(1):(0);
             String res=(arr[i]==0)?("Absent"):("Present");
                if(arr[i]==0)
                {
                    view.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            view.setBackgroundColor(getResources().getColor(R.color.item_red));
                        }
                    });
                }
                if(arr[i]==1)
                {
                    view.setBackgroundColor(getResources().getColor(R.color.item_green));
                }
                Toast.makeText(MainActivity.this, "Marked "+chars[i]+" as "+res, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

要做到这一点,您需要声明一个默认设置为false的布尔变量。单击任何特定项时,获取项的位置,并将布尔变量的值设置为true,这将帮助您获得结果。

仅在适配器类上使用Viewholder for listview android设置颜色

    public class MyAdapter extends BaseAdapter{
       String [] result;
    Context context;
       int [] imageId;
    private static LayoutInflater inflater=null;

 public Myadapter(MainActivity mainActivity, String[] prgmNameList, int[] prgmImages) {
  // TODO Auto-generated constructor stub
   result=prgmNameList;
    context=mainActivity;
   imageId=prgmImages;
   inflater = ( LayoutInflater )context.
 getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  }

     @Override
     public int getCount() {
      // TODO Auto-generated method stub
          return result.length;
      }

      @Override
        public Object getItem(int position) {
   // TODO Auto-generated method stub
    return position;
      }

   @Override
   public long getItemId(int position) {
   // TODO Auto-generated method stub
   return position;
    }

 public class Holder
    {
 TextView tv_language;
   ImageView im_language;
    }
   @Override
  public View getView(final int position, View convertView, ViewGroup parent) {
   // TODO Auto-generated method stub
   Holder holder=new Holder();
      View view;
      view = inflater.inflate(R.layout.layout_language_list_item, null);

   holder.tv_language=(TextView) view.findViewById(R.id.tv_language);
    holder.im_language=(ImageView) view.findViewById(R.id.image);

      holder.tv_language.setText(result[position]);
  Picasso.with(context).load(imageId[position]).into(holder.image);

    view.setOnClickListener(new OnClickListener() {
      @Override
     public void onClick(View v) {
       // TODO Auto-generated method stub
   //your color change if loop should come here

}
 });
   return view;
   }

  }

上面的适配器用于listview,包含一个imageview和一个textview。您需要在onclick listener中提供颜色更改代码。我在注释中提到了位置。请参阅listview的正确实现

谢谢您告诉我们您正在粘贴代码。现在,它在哪里?现在我保留了代码请查看它…澄清问题并引入外部代码。实际上我试图将代码粘贴到这里,但文本框没有粘贴完整的代码…它正在删除部分代码,所以我保留了url…默认情况下,它被设置为false,但如果您使用POJO,请建议我如何将其设置为true类来存储数据/值,然后在将数据存储到pojo类中时清除新的布尔类型变量set boolean variable false,每当您在listview中选择项时,获取项的位置并设置该posiiton boolean truebro我真的很欣赏您在运行时添加侦听器的想法。但这并没有奏效我也是。这是我的代码,请看一看。你需要使用一个适配器和一个holder类,如上面的代码所示。并且,应将onlcik提供给持有者视图。您仍然在主活动本身中为listitem提供onclick,而不使用viewholder类。有关使用viewholder类了解列表项的更多信息,请参阅上述教程
    public class MyAdapter extends BaseAdapter{
       String [] result;
    Context context;
       int [] imageId;
    private static LayoutInflater inflater=null;

 public Myadapter(MainActivity mainActivity, String[] prgmNameList, int[] prgmImages) {
  // TODO Auto-generated constructor stub
   result=prgmNameList;
    context=mainActivity;
   imageId=prgmImages;
   inflater = ( LayoutInflater )context.
 getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  }

     @Override
     public int getCount() {
      // TODO Auto-generated method stub
          return result.length;
      }

      @Override
        public Object getItem(int position) {
   // TODO Auto-generated method stub
    return position;
      }

   @Override
   public long getItemId(int position) {
   // TODO Auto-generated method stub
   return position;
    }

 public class Holder
    {
 TextView tv_language;
   ImageView im_language;
    }
   @Override
  public View getView(final int position, View convertView, ViewGroup parent) {
   // TODO Auto-generated method stub
   Holder holder=new Holder();
      View view;
      view = inflater.inflate(R.layout.layout_language_list_item, null);

   holder.tv_language=(TextView) view.findViewById(R.id.tv_language);
    holder.im_language=(ImageView) view.findViewById(R.id.image);

      holder.tv_language.setText(result[position]);
  Picasso.with(context).load(imageId[position]).into(holder.image);

    view.setOnClickListener(new OnClickListener() {
      @Override
     public void onClick(View v) {
       // TODO Auto-generated method stub
   //your color change if loop should come here

}
 });
   return view;
   }

  }