列表视图适配器中的按钮

2023-12-08

任何人都可以解决我的问题.. 经过 2 天的努力,我终于得到了 70% 的输出。 Exp:我有列表视图,其数据来自服务器。列表视图内部有一些文本、按钮和滚动索引 A、BC、D、E、F、G。
问题:按钮不起作用意味着当我单击它时...如果添加以下代码。 它看起来有些像下面的图片:

我在这里以这种方式在 XML 中使用---> com.woozzu.android.widget.IndexableListView 在这种情况下,单击按钮不起作用,滚动视图 A、B、C 以正确的方式显示并且工作正常。

enter image description here

状态 1:-

homempleb.xml

    <LinearLayout
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:background="#335552"
        android:layout_below="@+id/relativeLayout4" >                       
 <com.woozzu.android.widget.IndexableListView          
            android:id="@+id/homelistView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"               
            android:layout_weight="1.04"
            android:dividerHeight="0dip" />

MainActivity.java

public class MainActivity extends Activity implements
    SearchView.OnQueryTextListener, SearchView.OnCloseListener {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homempleb);
    Log.i("scan", " txtScanResult ");

    ActionItem nextItem = new ActionItem();
    final QuickAction quickAction = new QuickAction(this,
            QuickAction.VERTICAL);
    quickAction.addActionItem(nextItem);
    quickAction.setOnDismissListener(new QuickAction.OnDismissListener() {
        @Override
        public void onDismiss() {
            Toast.makeText(getApplicationContext(), "Dismissed",
                    Toast.LENGTH_SHORT).show();
        }
    });



   // listView = (IndexableListView) findViewById(R.id.homelistView);
    listView = (ListView) findViewById(R.id.homelistView);
    listView.setTextFilterEnabled(true);
    listView.setFastScrollEnabled(true);
    listView.setFastScrollAlwaysVisible(true);
    objectAdapter = new EfficientAdapter(this);     
    listView.setAdapter(objectAdapter);

}

高效适配器.java

public class EfficientAdapter extends BaseAdapter implements SectionIndexer {

private String mSections = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ArrayList<Patient> patientListArray;

private LayoutInflater mInflater;
private Context context;
protected ListView mListView;
private int positions;
ViewHolder holder;


public EfficientAdapter(Context context) {
    mInflater = LayoutInflater.from(context);
    this.context = context;

    String patientListJson = CountriesList.jsonData;
    JSONObject jssson;
    try {
        jssson = new JSONObject(patientListJson);
        patientListJson = jssson.getString("PostPatientDetailResult");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Gson gson = new Gson();
    JsonParser parser = new JsonParser();
    JsonArray Jarray = parser.parse(patientListJson).getAsJsonArray();
    patientListArray = new ArrayList<Patient>();
    for (JsonElement obj : Jarray) {
        Patient patientList = gson.fromJson(obj, Patient.class);
        patientListArray.add(patientList);
        Log.i("patientList", patientListJson);

    }
}

/**
 * sorting the patientListArray data
 */
public void sortMyData() {
    // sorting the patientListArray data
    Collections.sort(patientListArray, new Comparator<Object>() {
        @Override
        public int compare(Object o1, Object o2) {
            Patient p1 = (Patient) o1;
            Patient p2 = (Patient) o2;
            return p1.getName().compareToIgnoreCase(p2.getName());
        }

    });
}

public int getCount() {

    return patientListArray.size();
}

public Object getItem(int position) {

    return position;
}

public long getItemId(int position) {
    return position;
}

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

    this.positions = position;

    if (convertView  == null) {                     
        convertView = mInflater.inflate(R.layout.homemplebrowview, parent,false);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView.findViewById(R.id.name);
        holder.text2 = (TextView) convertView.findViewById(R.id.mrn);
        holder.text3 = (TextView) convertView.findViewById(R.id.date);
        holder.text4 = (TextView) convertView.findViewById(R.id.age);
        holder.text5 = (TextView) convertView.findViewById(R.id.gender);
        holder.text6 = (TextView) convertView.findViewById(R.id.wardno);
        holder.text7 = (TextView) convertView.findViewById(R.id.roomno);
        holder.text8 = (TextView) convertView.findViewById(R.id.bedno);


        holder.btnList = (Button) convertView.findViewById(R.id.listbutton);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.text1.setText(Util.formatN2H(patientListArray.get(position)
            .getName()));
    holder.text2.setText(patientListArray.get(position).getMrnNumber());
    holder.text3.setText(Util.formatN2H(patientListArray.get(position)
            .getRoom()));
    holder.text4.setText(Util.formatN2H(patientListArray.get(position)
            .getAge()));
    holder.text5.setText(Util.formatN2H(patientListArray.get(position)
            .getGender()));
    holder.text6.setText(Util.formatN2H(patientListArray.get(position)
            .getWard()));
    holder.text7.setText(Util.formatN2H(patientListArray.get(position)
            .getRoom()));
    holder.text8.setText(Util.formatN2H(patientListArray.get(position)
            .getBed()));


    //  holder.btnList.setOnClickListener(new OnClickListener(test));

    holder.btnList.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {                   
            Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show();
            Intent next = new Intent(context, Home.class);
            Log.i("next23", "next"+ next);
            context.startActivity(next);
        }
    });

    return convertView;
}



      /*OnItemClickListener test = new OnItemClickListener() {
onItemClick(AdapterView<?> parent, View view, int position, long id){
      ((TextView)view.findViewById(R.id.yourTextViewId)).getText();

  {
//    Button btnList=(Button)v.findViewById(R.id.listbutton);

    btnList.setOnClickListener(new OnClickListener(){
    public void onClick(View v) {                   
        Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show();
        Intent next = new Intent(context, Home.class);
        Log.i("next23", "next"+ next);
        context.startActivity(next);
    }

});
      }

         };
      */


static class ViewHolder {
    public Button btnList;
    public TextView text8;
    public TextView text7;
    public TextView text6;
    public TextView text5;
    public TextView text4;
    public TextView text1;
    public TextView text2;
    public TextView text3;
}

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



       /*public void onItemClick(AdapterView<?> arg0, View v, final int position,
          long arg3)
      {
    holder.btnList=(Button)v.findViewById(R.id.listbutton);

    holder.btnList.setOnClickListener(new OnClickListener(){
    public void onClick(View v) {                   
        Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show();
        Intent next = new Intent(context, Home.class);
        Log.i("next23", "next"+ next);
        context.startActivity(next);
    }

});
      }
        */



public int getPositionForSection(int section) {
    // sorting the patientListArray data
    sortMyData();
    // If there is no item for current section, previous section will be
    // selected
    for (int i = section; i >= 0; i--) {
        for (int j = 0; j < getCount(); j++) {
            if (i == 0) {
                // For numeric section
                for (int k = 0; k <= 9; k++) {
                    if (StringMatcher.match(
                            String.valueOf(patientListArray.get(j)
                                    .getName().charAt(0)),
                            String.valueOf(k)))
                        return j;
                }
            } else {
                if (StringMatcher.match(
                        String.valueOf(patientListArray.get(j).getName()
                                .charAt(0)),
                        String.valueOf(mSections.charAt(i))))
                    return j;
            }
        }
    }
    return 0;
}

public int getSectionForPosition(int position) {
    return 0;
}

public Object[] getSections() {
    String[] sections = new String[mSections.length()];
    for (int i = 0; i < mSections.length(); i++)
        sections[i] = String.valueOf(mSections.charAt(i));
    return sections;
}

    }

状态 2:-

在这种情况下,单击按钮工作正常,但滚动视图 A、B、C 也工作正常,但在侧面不会有字母 A、B、C、D、E、F、G... 如果我在 homempleb.xml 中添加 listview,那么两者都可以正常工作,但没有像图像中所示的字母索引。我希望按钮和滚动索引都像上面的图片一样工作。我不擅长这个主题。请帮助我 它是这样显示的:

enter image description here

homempleb.xml

<LinearLayout
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:background="#335552"
        android:layout_below="@+id/relativeLayout4" >                      
     <ListView
            android:id="@+id/homelistView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"               
            android:layout_weight="1.04"
            android:dividerHeight="0dip" />

如果有人仍然关心:

The TouchEvent is catched by the index scroller. See https://github.com/denley/IndexableListView/commit/18210a54487ba079bb332fafec709e2de26883db

只要改变那几行就可以了。

编辑:我只是出于好奇而查看。链接已失效。我猜这个错误在最近的版本中已经解决了(查看原始 IndexableListView 项目最近更新)。我不知道发生了什么变化,甚至不知道问题是什么,所以这是我的工作职能,恕我直言,可能是导致问题的原因,以防万一:

IndexedListView.java

@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (mScroller != null && mScroller.onTouchEvent(ev))
        return true;
    try{
    if (mGestureDetector == null) {
        mGestureDetector = new GestureDetector(getContext(),

                new GestureDetector.SimpleOnGestureListener() {
                    @Override
                    public boolean onFling(MotionEvent e1, MotionEvent e2,
                            float velocityX, float velocityY) {
                        if(mScroller!=null){
                        mScroller.show();
                        }
                        return super.onFling(e1, e2, velocityX, velocityY);
                    }

                });

    }
    }catch(Exception e){
        e.printStackTrace();
    }
    mGestureDetector.onTouchEvent(ev);

    return super.onTouchEvent(ev);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if(mScroller!=null){
    if(mScroller.contains(ev.getX(), ev.getY())){
        return true;
    }

    return super.onInterceptTouchEvent(ev);
    }
    return false;
}

IndexedScroller.java

public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
        if (mState != STATE_HIDDEN && contains(ev.getX(), ev.getY())) {
            setState(STATE_SHOWN);
            mIsIndexing = true;

            mCurrentSection = getSectionByPoint(ev.getY());

            mListView.setSelection(mIndexer
                    .getPositionForSection(mCurrentSection));
            return true;
        }
        break;
    case MotionEvent.ACTION_MOVE:
        if (mIsIndexing) {

            if (contains(ev.getX(), ev.getY())) {

                mCurrentSection = getSectionByPoint(ev.getY());
                mListView.setSelection(mIndexer
                        .getPositionForSection(mCurrentSection));
            }
            return true;
        }
        break;
    case MotionEvent.ACTION_UP:
        if (mIsIndexing) {
            mIsIndexing = false;
            mCurrentSection = -1;
        }
        if (mState == STATE_SHOWN)
            setState(STATE_HIDING);
        break;
    }
    return false;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表视图适配器中的按钮 的相关文章

  • Kotlin Android Firebase 数据库哈希映射转换为类

    我正在尝试从 firebase 数据库获取数据 断点显示它正在获取数据 但看起来我没有正确地将其分配给我的班级 这会导致此异常 java lang ClassCastException 无法将 java util HashMap 转换为 班
  • 服务如何在后台运行 - Android

    今天的采访中我被问到了这个问题 什么是服务 我对此的回答是 Service 是 Android 的基本组件 它没有 UI 并且在后台运行 Service 是否在主线程上运行 不 那么它是如何在后台运行的呢 我心里一片空白 有人可以解释一下如
  • 如何以编程方式判断蓝牙设备是否已连接?

    我了解如何获取已配对设备的列表 但如何判断它们是否已连接 这一定是可能的 因为我看到它们列在我手机的蓝牙设备列表中 并且它说明了它们的连接状态 将蓝牙权限添加到您的AndroidManifest中
  • 升级到 Proguard 4.8 后无法导出应用程序

    我刚刚将我的 Android SDK ADT 和 Proguard 升级到最新最好的版本 我的项目在调试模式下编译并运行良好 但是当我尝试导出它的签名版本 APK 时 我收到来自导出向导的错误Eclipse 控制台上没有任何错误日志消息 如
  • 突出显示列表视图项目

    我需要在触摸列表视图项目时突出显示它并保持突出显示状态 我尝试了我发现的一切 但没有任何效果 这是我的代码 这是列表视图
  • 无法接收UsbManager.ACTION_USB_DEVICE_ATTACHED/UsbManager.ACTION_USB_DEVICE_DETACHED的广播Intent

    我最近正在编写一个 USB 主机应用程序 但它被卡住了 因为我无法检测到设备连接 分离事件 我遵循了编码说明http developer android com guide topics connectivity usb host html
  • 构建应用程序时出现 BufferOverflowException

    每次我想运行我的 Android 应用程序时 我都会收到错误 2013 11 02 13 05 36 Dex Loader Unable to execute dex java nio BufferOverflowException Che
  • 在 Android 中使用 AES 加密的最佳实践是什么?

    我为什么问这个问题 我知道人们对 AES 加密存在很多疑问 即使对于 Android 也是如此 如果您在网络上搜索 会发现很多代码片段 但在每个页面上 在每个 Stack Overflow 问题中 我都发现了另一个具有重大差异的实现 所以我
  • 如何从画布中删除路径区域(Android)

    我需要裁剪角落ImageView 不要将它们弄圆 而是擦除每个角上的三角形 似乎唯一的方法就是覆盖onDraw方法并使用从画布上删除这些区域Path 问题是我没有纯色背景 所以我需要擦除这些区域 但不要用某种颜色填充它们 我为此使用以下代码
  • 如何防止应用程序被盗(针对Android应用程序)?

    我想知道防止人们窃取我的应用程序的最有效方法是什么 在线下载 apk 的副本而不是购买它 我已经花了一个lot特别是 Droidbox 上的时间 并且不会发布 Sync 直到我可以保证提供专业版本的非法副本的人无法发布 有人实施过这个吗 我
  • Android中如何使用intent加载本地html页面?

    我的 asset 目录中有一个 html 文件 我必须使用 Intent 将其加载为浏览器应用程序 这是我的代码 但它不起作用 startActivity new Intent Intent ACTION VIEW Uri parse fi
  • 如何让surfaceview透明

    大家好 我想让我的 DrawingSurface 视图透明 我尝试了很多东西 但它不起作用 这是我的 xml 代码 使我的表面视图透明
  • DialogFragment 关闭事件

    我需要处理 DialogFragment 的结尾 在调用 dismiss 之后 例如 我会在关闭后 包含 片段的活动内显示一个 toast 我该如何处理该事件 覆盖onDismiss 在你的DialogFragment中 或者使用setOn
  • Android 两个 Activity 之间的共享元素转换不起作用

    在我的应用程序中 我尝试使用新引入的活动之间共享的元素 如果共享元素具有固定位置 例如 android layout gravity top 但是当视图被锚定时问题就出现了 我的第一个活动如下所示
  • android - 如何让按钮每次按下时单击播放声音文件?

    我打开了一个新项目 现在我想做的是 通过按下按钮 我想要播放一个 mp3 文件 而且每次按下按钮时 声音文件都会再次从头开始播放 所以假设 mp3 长 10 秒 我按下按钮 它正在播放 4 秒后我再次按下按钮 声音将再次播放 现在我想知道的
  • Grade Plugin 3-alpha1 输出文件导致错误

    我正在尝试将项目更新到 Android Studio 3 build gradle 文件中不再接受以下代码片段 applicationVariants all variant gt variant outputs each out gt d
  • FCM 主题是否适合更多用户?

    我对使用主题消息有点困惑 我的场景是根据通知触发一些作业 请帮助我更多地了解这一点 如果我们正在处理大量用户 则可以使用 FCM 主题向用户发送通知 我们可以只使用数据消息和主题消息吗 使用主题发送的消息是否保证送达 我在 FCM 文档中看
  • 如何从另一个活动更新 Recyclerview 数据

    我有两个活动 MainActivity 和 Addlogactivity 我正在更新 Addlogactivity 中的数据 该数据应显示在 mainactivity recyclerview 中 数据未在数据库中更新 MianActivi
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • android.view.WindowLeaked - 使用对话框和新意图时

    我已经尝试了 stackoverflow 上提供的所有可能的解决方案 但我仍然在 logcat 中遇到此错误 活动 com xyz MainActivity 泄露了最初在此处添加的窗口 com android internal policy

随机推荐

  • 不再支持 Neo4j Filter 功能

    我想比较两个列表 以便找到第一个列表中不在第二个列表中的值并返回它们 预先感谢大家 代码返回 不再支持过滤器 有没有其他方法可以做到这一点 MATCH cu Customer name myCustomer pu PURCHASED gt
  • 将 mongodb 对象转换为 javascript 对象

    启动时我将配置文件传递给另一个 node js 模块 配置文件包含以下 json resolution activated true types of 23 当我在调用的 node js 模块中打印接收到的类型数组时 它看起来像 conso
  • 父子模块中的 Maven pom 继承和重写

    我很好奇如何决定子 pom 中的元素是否会覆盖父 pom 详细信息 或者只是与子 pom 中的父 pom 继承元素一起添加 我们举个例子来理解一下 例如 每个依赖项都由 Maven 坐标唯一标识 在子pom中 如果依赖项的maven坐标与父
  • 有没有办法让 Three.js 相机看起来偏离中心渲染?

    有没有办法设置 Three js 渲染器 使相机的观察点不在渲染图像的中心 澄清一下 在 0 0 0 处对一个只有一个 1x1x1m 立方体的场景进行成像 相机位于 0 0 10 观察点位于原点 与立方体的中心重合 如果我按原样渲染这个场景
  • 如何使用 php 从 HTML 表单收集数据?

    假设有一个 HTML 文件 其中有一个表单 其中包含一些数据 这些数据是使用 textarea 和 checkbox 从用户那里获取的输入 如何将此数据发送到 PHP 文件 您可以通过提交表单来发布此数据 然后在您可以使用的 php 文件上
  • 基于iOS 4并部署iOS 3的媒体播放器问题

    当在设备 3 1 2 上运行时 为什么它还传递 if NSClassFromString MPMoviePlayerViewController nil 做iOS4的代码就会崩溃 如何解决这个问题 if NSClassFromString
  • 使用 C# 将 FileStream 编码为 base64

    我知道如何对一个简单的字符串进行编码 解码base64 但是如果数据已经被写入文件流目的 假设我只能访问 FileStream 对象 而不能访问其中先前存储的原始数据 我将如何编码文件流转base64在将 FileStream 刷新到文件之
  • 具有重复数字的序列[重复]

    这个问题在这里已经有答案了 Data 我有一个data frame看起来像这样 df lt data frame id c 1 10 color c rep red 5 rep blue 5 df gt id color gt 1 1 re
  • 使用 django 查询返回活动时区中的日期时间

    我试图从表中检索最后 n 小时的行并在给定时区中打印它们的日期时间 给出打印日期时使用的时区 我试图使用 activate 使 django 返回具有正确时区的日期时间 但它返回 UTC 格式的日期 这是我当前的代码 min time da
  • Android 中如何实现通知功能?

    我正在 Android 上做一个帮助台应用程序 我想实现未读票证的通知 客户建议或投诉 在此应用程序的 iPhone 版本中 即使该应用程序未在应用程序图标本身上打开未读票据计数器 在 Android 中是否有可能 如果是这样 请帮助我像
  • QDate - 错误的年份

    我有以下情况 QDate fixDate QDate fromString QString 270912 ddMMyy 返回的年份是1912 我不明白为什么以及如何获得正确的年份 提前致谢 两位数年份始终解释为19xx 所以你可以通过YYY
  • Android并发数据库操作——“数据库被锁定”

    我正在编写一个具有 在线模式 的应用程序 即根据需要下载 解析数据并将其插入到 SQLite 数据库中 所有这些都是由服务执行的 该应用程序由多个请求服务更新数据的活动组成 不同的数据取决于活动 当用户浏览活动时 无需等待服务完成 很容易获
  • 比 MySQL 中的 UUID 更短的非重复字母数字代码

    当我插入一条记录时 MySQL数据库是否可以生成仅由数字和字母组成的5或6位数字代码 如果是这样怎么办 就像 goo gl bit ly 和 jsfiddle 一样 例如 http bit ly 3PKQcJ http jsfiddle n
  • Cakephp 和对多个结果集进行分页

    当在一个操作中调用一次 this gt paginate 时 我的分页工作正常 但它似乎不能很好地支持多次调用 这就是我想做的 function admin index published this gt pagination Post a
  • 核心动画围绕点旋转

    我想让 IBOutlet 围绕父视图中的特定点旋转 目前我只知道如何围绕锚点旋转它 但是 我想使用对象图层之外的点 旋转角度是相对于设备从该点出发的方向计算的 void viewDidLoad super viewDidLoad locat
  • 合并两个单独的 MySQL 查询的结果

    我正在尝试执行两个单独的数据库查询并将结果返回到表单 每个结果都写入一个表中 我希望能够将两个查询合并为一个查询 并按任务编号对结果进行排序 第一个查询 Booking Date date d m Y driver SESSION user
  • “从未使用过不可变值‘context’的初始化,请考虑替换对‘_’的赋值或将其删除

    我很快将变量声明为 let context LAContext LAContext 它会发出警告 从未使用过不可变值 context 的初始化 请考虑替换对 的赋值或将其删除 一切都在错误消息中 值 从未使用过 您的变量没有在任何地方使用
  • 将 Quartz 连接到 MS Sql Server

    我对 Quartz Job Scheduler 相当陌生 我可能会问一些愚蠢的问题 但是 我在将 Quartz Server 2010 连接到 MS SQL Server 2012 时遇到问题 我创建了几个工作正常的作业 但无法创建与 SQ
  • 字符串中当前位置左侧的字符位置

    从字符串中的某个任意位置 我需要找到距离我的位置左侧最近的字符位置 如果我想向右执行此操作 我可以使用 IndexOf 但我不确定如何向左做 我想出的两种方法只是从我的位置开始的递减循环 或者将字符串反向并使用正常的 IndexOf 其他人
  • 列表视图适配器中的按钮

    任何人都可以解决我的问题 经过 2 天的努力 我终于得到了 70 的输出 Exp 我有列表视图 其数据来自服务器 列表视图内部有一些文本 按钮和滚动索引 A BC D E F G 问题 按钮不起作用意味着当我单击它时 如果添加以下代码 它看