gpt4 book ai didi

java - 我如何使用这个监听器

转载 作者:搜寻专家 更新时间:2023-10-30 23:41:06 24 4
gpt4 key购买 nike

我已经尝试解决这个愚蠢的问题 9 个小时了,我快要哭了。

我有一个 ListView ,我只是想检测是否有人长按了某个项目。如果是这样,我想删除该项目。所以,我使用了以下代码:

 listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {

Log.v(TAG, "LONG CLICKED");


Toast.makeText(MainActivity.this, "Long click", Toast.LENGTH_SHORT).show();

contactArrayList.remove(pos);
arrayAdapter.notifyDataSetChanged();


return true;
}

//PLEASE HELP ME I AM GOING TO CRY WHY ISNT THIS WORKING
});

现在,第一次调用此方法,但在执行旋转屏幕等操作后,长按方法JUST DOESNT GET DETECTED。但是,如果我将另一个项目添加到列表中,它就会再次开始被检测到

因此,这是当我确实添加项目(即联系人姓名和号码)时执行的代码:

   @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_CONTACT && resultCode == RESULT_OK) {
contactUri = data.getData();
cursor = getContentResolver().query(contactUri, null, null, null, null);
cursor.moveToFirst(); //Move to first row...IDK why
int NumberColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); //Int column is the column of the numbers

String contactNumber = cursor.getString(NumberColumn);
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

if(contactArrayList.size() <= 4) {

contactArrayList.add(contactName + " - " + contactNumber);
arrayAdapter.notifyDataSetChanged();

这是我的 onCreate,虽然它看起来没有必要:

public class MainActivity extends AppCompatActivity {

ArrayList<String> contactArrayList;
ArrayAdapter <String> arrayAdapter;
ListView listview;
public static final int PICK_CONTACT = 100; //Request code to make sure it is same in onActivityResult and in startActivityForResult inent
SharedPreferences contacts;
SharedPreferences.Editor contactEditor;
private static final String TAG = "MainActivity";
Uri contactUri;
Cursor cursor;



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

contacts = this.getSharedPreferences("contacts", MainActivity.MODE_PRIVATE); //Making a shared preferences


contactArrayList= new ArrayList<String>();
listview = (ListView) findViewById(R.id.listView);

arrayAdapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, contactArrayList);
listview.setAdapter(arrayAdapter);

arrayAdapter.notifyDataSetChanged();


loadSavedStuff();

for (String s : contactArrayList){
Log.d(TAG, "Array List : "+ s);
}

}

public void loadSavedStuff() {
//CLEAR CONTENTS OF ARRAYLIST AND GET THEM FROM SHARED PREFERENCE OF CONTACTS SAVED IN ONPAUSE


if(contacts != null && (contacts.getStringSet("contactSetKey", null) != null)) { //If the shared preferences and the stuff inside
contactArrayList.clear();
contactArrayList.addAll(contacts.getStringSet("contactSetKey", null));
arrayAdapter.notifyDataSetChanged();
}


for (String s : contactArrayList){
Log.d(TAG, "Array List : "+ s);
}


}

请帮我解决这个问题。我已经为此花费了 9 个小时,我真的需要知道为什么它会发生以及如何解决它。这很奇怪,因为在添加项目后,长按再次被检测到......

非常感谢,非常感谢,

鲁契尔

最佳答案

根据评论部分的讨论。我们发现监听器是在 onActivityResult 中设置的,这会导致您之前描述的问题。

the long press method JUST DOESNT GET DETECTED. If I add another item to the list though, then it Starts getting detected again.

监听器设置在您的 onActivityResult 中,只有当您从选择联系人返回时才会触发。这就是为什么您只能在添加新联系人时长按。

在引用 ListView 后移动将监听器设置为 onCreate 的代码部分将解决您的问题。

要了解有关 Activity 生命周期和 onActivityResult 的更多信息,您可以引用 Activity Life CycleGetting a result from an Activity .

关于java - 我如何使用这个监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35110096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com