Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为简单的listview(仅使用一个类)设置my listview.setOnItemClickListener()_Java_Android_Listview_Onclicklistener - Fatal编程技术网

Java 如何为简单的listview(仅使用一个类)设置my listview.setOnItemClickListener()

Java 如何为简单的listview(仅使用一个类)设置my listview.setOnItemClickListener(),java,android,listview,onclicklistener,Java,Android,Listview,Onclicklistener,我正在为杂货清单创建一个简单的列表视图。用户输入项目并创建列表。我无法使所选项目被其他活动识别。我已设置共享项目,但它不会发送列表。它确实会发送一封带有主题行的电子邮件。我相信这是因为我的onclick侦听器用于列表项 这是模拟器的图像。这显示了我打算分享的内容: 以下是主要活动: public class MainActivity extends AppCompatActivity { //Global Variables for Grocery List ListView

我正在为杂货清单创建一个简单的列表视图。用户输入项目并创建列表。我无法使所选项目被其他活动识别。我已设置共享项目,但它不会发送列表。它确实会发送一封带有主题行的电子邮件。我相信这是因为我的onclick侦听器用于列表项

这是模拟器的图像。这显示了我打算分享的内容:

以下是主要活动:

public class MainActivity extends AppCompatActivity {

    //Global Variables for Grocery List
    ListView groceryList;
    ArrayList<String> aList =new ArrayList<String>();
    Button buttonAdd;
    EditText enterItem;
    ArrayAdapter<String> arrayAdapter;
    TextView item;
    String items = enterItem.getText().toString();

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

        //to include the action bar
        Toolbar toolbar = (Toolbar) findViewById(R.id.action_bar);
        setSupportActionBar(toolbar);

        //Grocery List, ListView
        groceryList= (ListView) findViewById(R.id.grocery_list);
        //set mode
        groceryList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//this adds checkbox mode
        groceryList.setAdapter(arrayAdapter);


        //Set up User Input Button and Edit Text:
        buttonAdd=(Button)findViewById(R.id.button_add);
        enterItem = (EditText)findViewById(R.id.enter_item);
        item = (TextView)findViewById(R.id.textView);


        arrayAdapter = new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_multiple_choice, aList); //this adds the checkboxes

        //Add Item Button onClickListener
        buttonAdd.setOnClickListener(new View.OnClickListener(){
           @Override
           public void onClick(View v){
               aList.add(items);
               arrayAdapter.notifyDataSetChanged();
           }
        });

        // ListView on item selected listener.
        groceryList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // what do I put here?
            }
        });
    }

    //Create options menu, it will show the three dots, in the home screen-action bar:
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_home, menu); //fill it with the menu
        return super.onCreateOptionsMenu(menu);
    }

    //To determine what menu_main item is selected code:
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()) {
            //write cases to check which menu_main item is selected and to implement actions
            case R.id.share:
                //Share your grocery list with a helpful friend
                Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
                shareIntent.setType("text/*");
                shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Grocery List");
                shareIntent.putExtra(Intent.EXTRA_TEXT, onContextItemSelected(item));
                startActivity(Intent.createChooser(shareIntent, "Share via"));

                Toast.makeText(this, "Shared It!", Toast.LENGTH_SHORT).show();
                return true;

            case R.id.viewList:
                //Click to view a list of all of your saved grocery items
                Toast.makeText(this, "View All Items", Toast.LENGTH_SHORT).show();
                return true;

            case R.id.save:
                //Save selected items to add to the "View All Items" list.
                Toast.makeText(this, "Items Are Saved", Toast.LENGTH_SHORT).show();
                return true;

            case R.id.delete:
                //Delete selected items from the Grocery List
                Toast.makeText(this, "Grocery List Items Deleted", Toast.LENGTH_SHORT).show();
                return true;

            default:
                //unknown error

            return super.onOptionsItemSelected(item);
        }


    }
}
public类MainActivity扩展了AppCompatActivity{
//杂货清单的全局变量
ListView杂货店;
ArrayList aList=新的ArrayList();
按钮D;
编辑文本输入项;
ArrayAdapter ArrayAdapter;
文本视图项;
String items=enterItem.getText().toString();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//要包含操作栏,请执行以下操作:
Toolbar Toolbar=(Toolbar)findViewById(R.id.action\u bar);
设置支持操作栏(工具栏);
//购物清单
groceryList=(ListView)findViewById(R.id.grocery\U列表);
//设定模式
groceryList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//这会添加复选框模式
groceryList.setAdapter(arrayAdapter);
//设置用户输入按钮并编辑文本:
ButtonAd=(按钮)findViewById(R.id.Button\u add);
enterItem=(EditText)findViewById(R.id.enter\u item);
item=(TextView)findViewById(R.id.TextView);
arrayAdapter=新的arrayAdapter(getApplicationContext(),
android.R.layout.simple_list_item_多项选择,aList);//这会添加复选框
//单击Listener上的添加项按钮
ButtonAd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
1.增加(项目);
arrayAdapter.notifyDataSetChanged();
}
});
//所选侦听器项上的ListView。
groceryList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//我在这里放什么?
}
});
}
//创建选项菜单,它将在主屏幕操作栏中显示三个点:
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气器。充气(R.menu.menu_home,menu);//用菜单填充它
返回super.onCreateOptions菜单(菜单);
}
//要确定选择了哪个菜单\u主项,请执行以下操作:
@凌驾
公共布尔值OnOptionItemSelected(@NonNull MenuItem item){
开关(item.getItemId()){
//编写案例以检查选择了哪个菜单\ u主项并执行操作
案例R.id.share:
//与乐于助人的朋友分享你的购物清单
意向共享意向=新意向(意向.行动\发送\多次);
setType(“text/*”);
shareIntent.putExtra(Intent.EXTRA_主题,“杂货清单”);
shareIntent.putExtra(Intent.EXTRA_TEXT,onContextItemSelected(item));
startActivity(Intent.createChooser(shareIntent,“通过共享”);
Toast.makeText(这是“共享的!”,Toast.LENGTH_SHORT.show();
返回true;
案例R.id.viewList:
//单击以查看所有已保存的杂货项目的列表
Toast.makeText(这是“查看所有项目”,Toast.LENGTH_SHORT).show();
返回true;
案例R.id.save:
//保存要添加到“查看所有项目”列表的选定项目。
Toast.makeText(此“项目已保存”,Toast.LENGTH_SHORT).show();
返回true;
案例R.id.delete:
//从杂货店列表中删除所选项目
Toast.makeText(这是“已删除的杂货店列表项目”,Toast.LENGTH_SHORT.show();
返回true;
违约:
//未知错误
返回super.onOptionsItemSelected(项目);
}
}
}
以下是我的活动_mail.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <include
        android:id="@+id/action_bar"
        layout="@layout/action_bar_home"></include>

    <EditText
        android:id="@+id/enter_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@string/enter_item"
        android:inputType="text"
        android:layout_gravity="center"/>

    <Button
        android:id="@+id/button_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add_item"
        android:layout_gravity="center"/>

    <ListView
        android:id="@+id/grocery_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

最后,这里是项目_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

</LinearLayout>


如何让OnClickListener识别所选项目,让我的应用程序为它们执行活动,如共享、删除等?

在您的代码中,您正在更改
arrayAdapter
设置为适配器后的值

main活动中
onCreate开始时的

groceryList= (ListView) findViewById(R.id.grocery_list);
//set mode
groceryList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//this adds checkbox mode
groceryList.setAdapter(arrayAdapter);
它使用arrayAdapter的当前值影响groceryList的适配器

但之后几行:

arrayAdapter = new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_multiple_choice, aList);
如果不这样做,ListView的适配器将是
arrayAdapter
的“旧”值,您将无法处理它,因为您已用新值擦除了它

然后,当您想向列表中添加或项时,请使用类似的方法


我需要构建一个ListActivity类和一个ListAdapter类,以便代码正常工作。我想我错过了这些课程。

我按照你说的组织了这些信息,但对听众来说并不合适。它仍然不会将所选项目发送到电子邮件正文。我只用一个文本字符串来测试我的意图。意图工作正常,因为它将字符串发送到电子邮件正文。我需要一个能够识别所选项目的侦听器。好的,我明白了,如果您正在使用,那么您必须使用适配器提供的方法。因此,在侦听器中,不要执行
aList.add(items)呼叫!现在让我看看,如果有效,我会更新答案
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //to include the action bar
    Toolbar toolbar = (Toolbar) findViewById(R.id.action_bar);
    setSupportActionBar(toolbar);

    // Affect the arrayAdapter
    arrayAdapter = new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_multiple_choice, aList); 

    //Grocery List, ListView
    groceryList= (ListView) findViewById(R.id.grocery_list);
    //set mode
    groceryList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//this adds checkbox mode

    // and then use it as the adapter but never '=' it again
    groceryList.setAdapter(arrayAdapter);


    //Set up User Input Button and Edit Text:
    buttonAdd=(Button)findViewById(R.id.button_add);
    enterItem = (EditText)findViewById(R.id.enter_item);
    item = (TextView)findViewById(R.id.textView);


    ...
}