【问题标题】:Get ListView text and position on button click获取按钮单击时的 ListView 文本和位置
【发布时间】:2018-09-10 12:08:43
【问题描述】:

我知道这个问题是 4 年前提出的,但没有一个答案对我有帮助。我正在阅读一本书(Apress 的 Android Pro 5),试图让这个项目发挥作用。但是,强制性书籍已过时。

我有一个简单的ListView,底部有一个按钮。每个列表视图项旁边都有一个复选框。当点击按钮时,它应该说“ListView is checked at position”。

一切都加载,视觉上,很好。但是,当我按照书上的说明进行操作时,按钮什么也不做。当我按照Get listview item position on button click 文章中的任何说明进行操作时,单击按钮时应用程序会崩溃。请注意,我下面的代码就是我所拥有的一切。没有任何其他方法或其他任何东西。这是我的代码:

//代码设置的主要部分

public class MainActivity extends AppCompatActivity {

private ListView listView1;
private Button button1;
private ArrayAdapter<String> listAdapter1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView1 = (ListView) findViewById(R.id.listView1);
    String[] someColors = new String[]{"Red", "Orange", "Yellow", "Green", 
    "Blue", "Indigo", "Violet", "Black", "White"};

    ArrayList<String> colorArrayList = new ArrayList<String>();

    colorArrayList.addAll(Arrays.asList(someColors));

    listAdapter1 = new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_checked, colorArrayList);

    listView1.setAdapter(listAdapter1);

//添加复选框

    listView1.setChoiceMode(listView1.CHOICE_MODE_MULTIPLE);

//这里是列表视图的onItemClickListener

    listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int 
    position, long id) {
            String itemValue = (String) 
    listView1.getItemAtPosition(position);

            Toast.makeText(getApplicationContext(), itemValue, 
   Toast.LENGTH_LONG).show();
        }
    });
}

//这里是完全没有响应的动作。它在运行时实际上不会发生任何事情。

public void doClick(View view) {
    int count = listView1.getCount();

    SparseBooleanArray viewItems = listView1.getCheckedItemPositions();

    for (int i = 0; i < count; i++) {
        if(viewItems.get(i)){
            String selectColor = (String)listView1.getItemAtPosition(i);
            Log.v("List View", selectColor + "is checked at position" + i);
        }
    }

}

为了更好的衡量,这是我的 XML:

<LinearLayout
    android:layout_width="368dp"
    android:layout_height="492dp"
    android:orientation="vertical"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp">

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="62dp"
        android:text="@string/sub"
        android:onClick="doClick"
    />


</LinearLayout>

【问题讨论】:

    标签: android listview button onclicklistener buttonclick


    【解决方案1】:

    更改以下行
    @Override
    public void onItemClick (AdapterView < ? > parent, View view, int
    position,long id){
            String itemValue = (String)
                    listView1.getItemAtPosition(position);
    
            Toast.makeText(getApplicationContext(), itemValue,
                    Toast.LENGTH_LONG).show();
        }
    });
    

    @Override
    public void onItemClick (AdapterView < ? > parent, View view, int
    position,long id){
            String itemValue = colorArrayList.get(position);
    
            Toast.makeText(getApplicationContext(), itemValue,
                    Toast.LENGTH_LONG).show();
        }
    });
    

    【讨论】:

    • 好消息,更改不会使应用程序崩溃,并且项目在检查时仍会弹出其名称。但是,按钮仍然没有响应;单击按钮时什么都不会发生,除了按钮动画。想法?
    • 该按钮不应该做任何事情,除了打印日志。单击按钮后检查您的 logcat
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多