listview <二> item点击事件

本文提供了一个基于Android的应用示例,通过一个列表视图展示不同的布局类型,如LinearLayout、AbsoluteLayout等。用户点击列表项会启动对应布局类型的Activity。

package com.wps.android;
 
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class Layouts extends Activity {
    /** Called when the activity is first created. */
    private ListView mylistview;
    private ArrayList<String> list = new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mylistview = (ListView)findViewById(R.id.listview);
        list.add("LinearLayout");
        list.add("AbsoluteLayout");
        list.add("TableLayout");
        list.add("RelativeLayout");
        list.add("FrameLayout");
        ArrayAdapter<String> myArrayAdapter = new ArrayAdapter<String>
                            (this,android.R.layout.simple_list_item_1,list);
        mylistview.setAdapter(myArrayAdapter);
        /*mylistview.setOnTouchListener(new OnTouchListener(){
 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if(event.getAction() == MotionEvent.ACTION_DOWN)
                {
                    mylistview.setBackgroundColor(Color.BLUE);
                }
                return false;
            }
             
        });*/
        mylistview.setOnItemClickListener(new OnItemClickListener(){
 
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                if(list.get(arg2).equals("LinearLayout"))
                {
                    Intent intent = new Intent("com.wps.android.LINEARLAYOUT");
                    startActivity(intent);
                }
                if(list.get(arg2).equals("AbsoluteLayout"))
                {
                    Intent intent = new Intent("com.wps.android.ABSOLUTELAYOUT");
                    startActivity(intent);
                }
                if(list.get(arg2).equals("TableLayout"))
                {
                    Intent intent = new Intent("com.wps.android.TABLELAYOUT");
                    startActivity(intent);
                }
                if(list.get(arg2).equals("RelativeLayout"))
                {
                    Intent intent = new Intent("com.wps.android.RELATIVELAYOUT");
                    startActivity(intent);
                }
                if(list.get(arg2).equals("FrameLayout"))
                {
                    Intent intent = new Intent("com.wps.android.FRAMELAYOUT");
                    startActivity(intent);
                }
            }
             
        });
    }
}


本文转自:http://www.cnblogs.com/pswzone/archive/2012/03/10/2389275.html

<think>好的,我现在需要帮助用户解决关于JavaFX中JFXListView组件默认展开的问题。用户提供的代码片段显示他们正在使用JFXListView,其中包含一个groupnode和一些子项。用户希望这个组在启动时默认展开。 首先,我需要回忆一下JavaFX中树形结构或列表视图的展开机制。JFXListView可能属于第三方库的一部分,比如JFoenix,因为标准的JavaFX ListView并不直接支持分组节点或者展开/折叠功能。常见的具有分组和展开功能的控件是TreeView,它使用TreeItem来管理节点,并且可以通过设置expanded属性来控制展开状态。 用户提到的JFXListView可能是一个自定义控件,或者可能是用户误用了控件名称。假设这里的JFXListView确实支持类似TreeView的分组功能,那么可能需要找到对应的节点并设置其展开状态。如果使用的是TreeView,通常会通过获取TreeItem并调用setExpanded(true)方法来实现默认展开。但在这里,用户使用的是JFXListView,所以需要确认该控件是否支持类似的功能。 接下来,我需要查看用户提供的代码结构。在代码中,有一个groupnode包裹着一个Label作为父节点,随后有两个Label作为子项。这可能意味着groupnode代表一个可展开的组,而子Label是其中的项。如果JFXListView的groupnode类似于TreeItem,那么可能需要获取该节点的实例,并设置其展开状态。 可能的解决方案包括: 1. 在控制器类中,通过fx:id="subList1"获取JFXListView实例,并找到对应的groupnode节点,然后调用展开的方法,比如setExpanded(true)。这需要确认JFXListView的API是否提供这样的方法。 2. 如果JFXListView不支持直接设置展开状态,可能需要检查是否有相关的CSS类或样式可以应用,但通常展开状态是逻辑上的,而非样式控制。 3. 另外,可能需要查看JFoenix库的文档或源码,确认JFXListView是否支持分组以及如何控制展开状态。例如,某些自定义控件可能通过数据模型中的属性来控制,比如在数据对象中设置expanded属性。 假设用户使用的是类似于TreeView的结构,但误写为JFXListView,那么正确的控件应该是JFXTreeView。如果是这种情况,用户需要将JFXListView替换为JFXTreeView,并使用TreeItem来管理节点,然后通过设置TreeItem的expanded属性来展开。 另一个可能性是用户使用的是JFXListView的自定义实现,其中groupnode是一个自定义的单元格,具有展开/折叠的功能。这时候可能需要访问该单元格的控件,并触发展开事件,或者在数据模型中设置一个标志位,让单元格渲染时自动展开。 如果用户无法更改控件类型,可能需要寻找其他方法,比如在初始化时模拟用户点击展开按钮的事件。但这可能涉及到查找节点并触发鼠标事件,这种方式不够可靠,且依赖于UI结构。 总结可能的步骤: 1. 确认JFXListView是否支持分组展开功能,查阅相关文档或源码。 2. 如果支持,找到对应的节点或数据模型,设置expanded属性为true。 3. 如果使用的是错误的控件类型,建议改用JFXTreeView或标准TreeView,并正确设置TreeItem的expanded属性。 由于用户提供的代码片段中使用的是JFXListView,而标准或JFoenix中的JFXListView可能并不支持分组展开,因此可能存在控件使用上的错误。正确的做法应该是使用TreeView或JFXTreeTableView等支持分组的控件。因此,在回答中需要指出这一点,并提供相应的解决方案,比如改用TreeView,并设置TreeItem的expanded属性。 此外,如果用户确实需要使用JFXListView并且该控件具有自定义的分组功能,可能需要通过样式类或查找子节点的方式来控制展开状态,但这种方法需要更深入的知识或查阅特定库的文档。 最后,确保回答结构清晰,逐步引导用户检查控件类型是否正确,并提供修改建议和示例代码,比如使用TreeView和TreeItem的示例。</think>要让`JFXListView`中的分组节点默认展开,需要根据控件类型采取不同策略。根据代码结构判断,您可能混淆了控件类型,以下是分步解决方案: $\color{red}关键问题识别$:标准`JFXListView`不支持分组展开功能,您需要的实际是树形控件。建议改用`JFXTreeView`(来自JFoenix库)或JavaFX原生`TreeView` $\boxed{正确实现步骤}$: 1. **控件替换**:将`JFXListView`改为`TreeView`或`JFXTreeView` ```xml <!-- 使用原生TreeView示例 --> <TreeView fx:id="myTree"> <root> <TreeItem value="Item 6" expanded="true"> <!-- 关键expanded属性 --> <children> <TreeItem value="Item 6.1"/> <TreeItem value="Item 6.2"/> </children> </TreeItem> </root> </TreeView> ``` 2. **动态设置展开状态**(适用于代码初始化): ```java // 在控制器类中 @FXML private TreeView<String> myTree; public void initialize() { TreeItem<String> root = myTree.getRoot(); root.setExpanded(true); // 设置展开状态 } ``` 3. **若坚持使用JFXListView**(需确认控件支持展开功能): ```java // 假设存在setExpanded方法(非常规用法) subList1.getGroupNodes().forEach(node -> node.setExpanded(true)); ``` $\boxed{重要提示}$: 1. `JFXListView`通常用于线性列表展示,如需层级结构: - ✅ 推荐使用`TreeView`/`JFXTreeView` - ✅ 表格结构可用`TableView`/`JFXTreeTableView` 2. 验证JFoenix版本:确保使用最新JFoenix版本(查看[maven仓库](https://mvnrepository.com/artifact/com.jfoenix/jfoenix)),老版本可能功能不全 3. 自定义单元格方案:如需高级样式,可继承`TreeCell`实现自定义展开图标: ```java myTree.setCellFactory(tv -> new TreeCell<>() { @Override protected void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (empty) setGraphic(null); else setGraphic(new Label(item)); // 自定义图形节点 } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值