【问题标题】:android - ListView short blink on OnItemClickListenerandroid - ListView 在 OnItemClickListener 上短暂闪烁
【发布时间】:2015-07-25 19:56:14
【问题描述】:

在 OnItemClick() 方法中,我加载了新的 Activity。我的 ListView 项目在 OnItemClick() 上闪烁(我的意思是,稍微改变亮度或其他东西 - 不知道如何正确地说),但闪烁片刻,然后在新的 Activity 加载之前返回到以前的外观。我希望 ListView 项目在加载新 Activity 之前一直闪烁,而不是片刻。怎么做?

【问题讨论】:

  • 我了解到您正在尝试在单击列表时使列表中的项目闪烁,并且会一直闪烁直到 Activity 启动。对吗?
  • 也许不会“会眨眼”,但会一直眨眼。我的意思是它需要一些时间来开始新的活动(或者对于我放入 onItemClick() 的任何操作)并且我希望它改变亮度(或者当我们通常单击项目时发生的变化)并保持点击状态直到 onItemClick 中的操作( ) 完成
  • 我不明白。可能是你分享你的代码,所以其他人可以帮助你
  • @mubeen 这个想法很简单(也许,我没有解释清楚,但换句话说,我会再试一次)。当您点击 ListView 中的某个项目时,它通常会改变它的外观。然后发生了一些事情。就我而言,它只是改变了片刻,然后恢复到正常状态,然后发生了一些事情。我需要它保持第二种“被挖掘”的方式,直到“某事”发生。例如,如果一个项目是蓝色的,当它被点击时它变成红色,我需要它一直保持红色,直到 OnItemClick() 中的所有事情发生,而不是在几毫秒内将它恢复为蓝色

标签: android listview onitemclicklistener onitemclick


【解决方案1】:

您可以为此使用 View.setOnClickListener..

当您将意图传递到下一页时,更改列表视图项的背景颜色

    view.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                arg0.setBackgroundColor(Color.RED);
                Intent intent = new Intent(MainActivity.this, CheckinoutPage.class);
                startActivity(intent);
            }
        });

【讨论】:

    【解决方案2】:
    public class MainActivity extends Activity {
    
    DataBaseAdapter dataBaseAdapter;
    ListView listview;
    MainListViewAdapter adapter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        dataBaseAdapter = new DataBaseAdapter(MainActivity.this);
    
        dataBaseAdapter.openDatabase();
    
        listview = (ListView) findViewById(R.id.listview1);
    
        adapter = new MainListViewAdapter(this, dataBaseAdapter.getAllMainDetails());
        listview.setAdapter(adapter);
    
    }
    

    }

    类 ListView 适配器为

    public class MainListViewAdapter extends BaseAdapter {
    
    Context mContext;
    LayoutInflater inflater;
    private List<DetailsPOJO> details = null;
    private ArrayList<DetailsPOJO> arraylist;
    
    public MainListViewAdapter(Context context, List<DetailsPOJO> details) {
        mContext = context;
        this.details = details;
        inflater = LayoutInflater.from(mContext);
        this.arraylist = new ArrayList<DetailsPOJO>();
        this.arraylist.addAll(details);
    }
    
    public class ViewHolder {
        TextView checkindatetime, checkoutdatetime, latitudein, longitudein, addressin;
    
    }
    
    @Override
    public int getCount() {
        return details.size();
    }
    
    @Override
    public Object getItem(int position) {
        return details.get(position);
    }
    
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    
    @Override
    public View getView(final int position, View view, ViewGroup parent) {
        final ViewHolder holder;
    
        if (view == null) {
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.maincustomrow, null);
            // Locate the TextViews in listview_item.xml
            holder.checkindatetime = (TextView) view.findViewById(R.id.checkindatetime);
            holder.latitudein = (TextView) view.findViewById(R.id.latin);
            holder.longitudein = (TextView) view.findViewById(R.id.longin);
            holder.addressin = (TextView) view.findViewById(R.id.addin);
            holder.checkoutdatetime = (TextView) view.findViewById(R.id.checkoutdatetime);
    
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
    
        holder.checkindatetime.setText(details.get(position).getCheckindatetime());
        holder.latitudein.setText(details.get(position).getLatitudein());
        holder.longitudein.setText(details.get(position).getLongitudein());
        holder.addressin.setText(details.get(position).getAddressin());
    
        view.setOnClickListener(new OnClickListener() {
    
    
            @Override
            public void onClick(View arg0) {
    
               //This part gives color on click till the next page loads
    
                arg0.setBackgroundColor(Color.RED);
    
    
    
                String checkindate = details.get(position).getCheckindatetime();
                Intent intent = new Intent(getApplicationContext(), LatLongDeatils.class);
                intent.putExtra("checkindate", checkindate);
                startActivity(intent);
            }
        });
        return view;
    }
    

    }

    【讨论】:

      【解决方案3】:

      您所说的眨眼可能是项目选择器。对于您来说,您最好的选择可能是禁用默认选择器并自己手动实现它。

      因此,在您的适配器的 getView 中,我将 onClickListener 设置为您的 convertView,并在触发时将其 backgroundColour 设置为蓝色或任何颜色,然后执行操作。这样,它将保持该颜色,直到加载下一个 Activity。这就是解决方案的要点,如果您需要更多帮助,请告诉我,我将编辑此答案。

      编辑:针对您在下面的第二条评论,尝试使用适配器中的公共 int 跟踪单击的列表项,并将其在 Activity/Fragments onResume 中重置为 -1 之类的值。然后在适配器的 getView 中检查此列表项是否为选定项,设置背景颜色,否则将其返回为白色或您的默认颜色。

      【讨论】:

      • 是的,这是一个很好的解决方案,但就我而言,我不会改变颜色。我在上面讲述了颜色,它更容易理解。我需要它来改变它通常在 onItemClick() 时改变的方式(它看起来几乎一样,但就像在一个透明的黑色窗帘后面......例如,白色变得有点灰(不记得其他颜色)。我不知道如何解释这种效果,但在许多应用程序中 onClick() 时几乎总是这样。我可以附上示例图片,但没有这样的功能:(
      • 只是尝试按照您的方式进行操作,但我不知道在返回该活动时如何返回其以前的颜色(操作栏上的后退按钮和导航按钮)
      • 响应您的第二条评论,尝试使用适配器中的公共 int 跟踪单击的列表项,并在 Activity/Fragments onResume 中将其重置为 -1。然后在适配器的 getView 中检查此列表项是否为选中项,设置背景颜色,否则将其返回为白色或您的默认颜色。
      猜你喜欢
      • 2019-04-02
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多