【问题标题】:Android How to change OnItemClickListener code in OnClickListener codeAndroid 如何在 OnClickListener 代码中更改 OnItemClickListener 代码
【发布时间】:2013-10-29 12:30:02
【问题描述】:

我更改了SherlockActivity 中的初始活动,以便从 ABS 的所有优势中受益。为此,我使用ListAdapterAnSco extends BaseAdapter。 现在我想在我的ListAdaptergetView 中管理onclickonLongClick。 我使用了几种组合,但我做不到。

注意:我使用SQLiteCursor 来获取物品

OnItemClickListener 原代码


public void onItemClick(AdapterView<?>  parent, View v, int position,
                    long id) {
                Intent intent = new Intent(getApplicationContext(),ListPeriode.class);

                SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position);
                String ansco=cr.getString(cr.getColumnIndex(DatabaseHelper.ANSCO));
                AnSco an=new AnSco(ansco);
                an.setIdan((int)id);

                Toast.makeText(getApplicationContext(), "Année Scolaire: "+an.getAnsco(), Toast.LENGTH_LONG).show();
                intent.putExtra("ANSCO_ID", an.getIdan());
                intent.putExtra("ANSCO_AN", an.getAnsco());
                cr.close();
                startActivity(intent);
                finish();
            }

如何在 OnClick 方法中更改此代码以完成相同的工作?

我的视图


public View getView(final int position, View view, ViewGroup parent) {
        final ViewHolder holder;
        if (view == null) {
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.annee_sco_item, null);
            // Locate the TextViews in listview_item.xml
            holder.an = (TextView) view.findViewById(R.id.ansco_item);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        // Set the results into TextViews
        holder.an.setText(listAnsco.get(position).getAnsco());

        // Listen for ListView Item Click
        view.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {


            }
        });

        return view;
    }

【问题讨论】:

  • 你的 onClickListener 工作正常吗?
  • 将 SQLiteCursor cr 传递给您的适配器构造函数。
  • 你的 onItemClick() 在哪里?
  • listView Row 中是否有任何按钮..?
  • 这一行有错误:SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position);

标签: android onclicklistener listadapter onitemclicklistener


【解决方案1】:

提取 OnClickListener 到单独的类并再次传递它

MyClickListener.java

 public class MyClickListener implements onItemClickListener
 {
     @override
     public void onItemClick(AdapterView<?>  parent, View v, int position, long id)
     {
         Intent intent = new Intent(getApplicationContext(),ListPeriode.class);
         SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position);
         String ansco=cr.getString(cr.getColumnIndex(DatabaseHelper.ANSCO));
         AnSco an=new AnSco(ansco);
         an.setIdan((int)id);
         Toast.makeText(getApplicationContext(), "Année Scolaire:"+an.getAnsco(), Toast.LENGTH_LONG).show();
         intent.putExtra("ANSCO_ID", an.getIdan());
         intent.putExtra("ANSCO_AN", an.getAnsco());
         cr.close();
         startActivity(intent);
         finish();
     }
}

在您的适配器中删除

   // Listen for ListView Item Click
    view.setOnClickListener(new OnClickListener() {
           @Override
           public void onClick(View arg0) {
            }
        });

YourActivity.java

@override
onCraete(Bundle x)
{
    ListView listView = (ListView) findViewById(R.i.your_list_id);
    listView.setAdapter(new YourAdapter()); 
    listView.setOnItemClickListener(new MyClickListener());
}

【讨论】:

  • 无法覆盖 onClickListener 中的 onItemClick
  • 无法在getView中实现onItemClickListener
  • 感谢您帮助 OnClick Works。但是现在当我单击列表项时,我遇到了一个新问题。我将在一个新帖子中解释它。此行有错误:SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position);Java.lang.ClassCastException: com.android.moyenne.ansco.AnSco cannot be cast to android.database.sqlite.SQLiteCursor
【解决方案2】:

你可以使用:

        holder.an.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

          Intent intent = new Intent(contetx,ListPeriode.class);

            SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position);
            String ansco=cr.getString(cr.getColumnIndex(DatabaseHelper.ANSCO));
            AnSco an=new AnSco(ansco);
            an.setIdan((int)id);

            Toast.makeText(context, "Année Scolaire: "+an.getAnsco(), Toast.LENGTH_LONG).show();
            intent.putExtra("ANSCO_ID", an.getIdan());
            intent.putExtra("ANSCO_AN", an.getAnsco());
            cr.close();
            startActivity(intent);
            finish();

        }
    });

并且必须将上下文传递给您扩展 BaseAdapter 的类

【讨论】:

  • 这一行有错误:SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position);
猜你喜欢
  • 2020-12-21
  • 1970-01-01
  • 2018-02-22
  • 2017-04-16
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2018-07-23
  • 2023-04-04
相关资源
最近更新 更多