【问题标题】:Dynamic listview listeners (OnItemClickListener)动态列表视图侦听器 (OnItemClickListener)
【发布时间】:2016-10-17 09:39:18
【问题描述】:

我想让 OnItemClickListener 成为动态列表视图。列表视图不应该有固定的大小。相反,它是数据库中行的大小。但是我如何创建监听器,因为我不知道列表视图的大小,所以我不能使用当前的方法。

问题出在内部类中 if(position==0) { ... }

public class VisaUtgiftFragment extends Fragment {
    private MainActivity ui;
    private TextView tvDatabase;
    private MyDBHandler dbHandler;
    private ListView lvUtgift;



    public VisaUtgiftFragment() {
        // Required empty public constructor
    }

    public void setActivity(MainActivity ui){
        this.ui = ui;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_visa_utgift, container, false);
        tvDatabase = (TextView)view.findViewById(R.id.tvDatabaseTest);
        dbHandler = new MyDBHandler(getActivity(), null, null, 1);
        tvDatabase.setText(dbHandler.databaseToString());
        lvUtgift = (ListView)view.findViewById(R.id.lvUtgift);
//        lvUtgift.setAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, [the rows in the database]));
        lvUtgift.setAdapter(new SimpleCursorAdapter(getActivity(),
                android.R.layout.simple_list_item_1,
                dbHandler.getAllItemsInCursor(),
                new String[]{"_titel"},
                new int[]{android.R.id.text1},
                0));
        lvUtgift.setOnItemClickListener(new ListViewClicked());

        return view;
    }

    private class ListViewClicked implements android.widget.AdapterView.OnItemClickListener {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if(position==0) { //Should be the clicked listview and execute the code
                Cursor cursor = (Cursor) lvUtgift.getItemAtPosition(position);
                String string = cursor.getString(cursor.getColumnIndexOrThrow("_titel"));
                Toast.makeText(getActivity().getApplicationContext(), string, Toast.LENGTH_SHORT).show();
                ui.dVisaInkomst();
            }
        }
    }
}

【问题讨论】:

  • 什么问题?
  • 问题如下:我正在尝试创建一个不使用函数 if(position == 0){} else if(position == 1){} 的处理程序,因为我赢了'不能做这么多语句,因为列表视图是动态的,并且会一直变大。
  • 如果我理解,您需要根据点击的位置执行不同的操作吗?

标签: android listview android-fragments onitemclicklistener


【解决方案1】:

onClickItem中删除if条件。

private class ListViewClicked implements android.widget.AdapterView.OnItemClickListener {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             Cursor cursor = (Cursor)lvUtgift.getItemAtPosition(position);
             if(cursor != null){
                 String string = cursor.getString(cursor.getColumnIndexOrThrow("_titel"));
                 Toast.makeText(getActivity().getApplicationContext(), string, Toast.LENGTH_SHORT).show();
                 ui.dVisaInkomst();
             }               
        }
    }

【讨论】:

  • 这无济于事。我需要一种能够做出更多 if 语句的方法。示例 if (第一个 listview 元素被点击){ ... } else if(第 304 个 listview 元素被点击){...}
  • 这是不可能的。为什么需要这种 if.. else.. ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多