gpt4 book ai didi

android - 如何获取电话号码并在 BaseAdapter 中使用选定用户填写 EditText 控件?

转载 作者:行者123 更新时间:2023-11-30 03:16:46 25 4
gpt4 key购买 nike

我希望在联系人地址中选择一个用户后,点击holder.btnAddress按钮打开联系人地址,并在holder.editNumber控件中填写电话号码。我能怎么做?谢谢!

顺便说一句,我不知道我是否可以在类 ListNumberAdapter 中添加函数 protected void onActivityResult (int requestCode, int resultCode, Intent data)

package ui;
import info.dodata.smsforward.R;
import java.util.List;
import bll.PublicPar;
import android.content.Context;
import android.content.Intent;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class ListNumberAdapter extends BaseAdapter {

private LayoutInflater mInflater;
private List<String> mListNumber;
private Context mContext;

public ListNumberAdapter(Context context, List<String> listNumber){
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mListNumber=listNumber;
mContext=context;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return mListNumber.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.sms_list_phone_number, null);
holder.tvContactName = (TextView) convertView.findViewById(R.id.tvname);
holder.editNumber = (EditText) convertView.findViewById(R.id.editnumber);
holder.btnAddress=(Button)convertView.findViewById(R.id.btnAddress);
holder.btnDelete=(Button)convertView.findViewById(R.id.btnDelete);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.id=position;
holder.tvContactName.setId(position);
holder.editNumber.setId(position);
holder.btnAddress.setId(position);
holder.btnDelete.setId(position);

holder.editNumber.setText(mListNumber.get(position));

holder.btnAddress.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
mContext.startActivity(i);
//mContext.startActivityForResult(i,0); //Don't work
}
});

return convertView;
}


}


class ViewHolder {
int id;
TextView tvContactName;
EditText editNumber;
Button btnAddress;
Button btnDelete;
}

最佳答案

如果您需要从 BaseAdapter 调用 Activity#startActivityForResult(Intent, int),您应该将 Activity 传递给 BaseAdapter 的构造函数。您可能已经通过调用这样做了:

ListNumberAdapter lna = new ListNumberAdapter(this, someListOfStrings);

但是,在 ListNumberAdapter 的构造函数中,您将 Activity 向下转换为 Context。

因此,您需要进行的第一项更改是:

// In place of Context, use Activity
// We can do this because Context class is
// an ancestor of Activity class
private YourActivity mActivity;

// We'll use this variable to keep track of
// the position of the button that's been clicked
public int positionClicked;
....
....

public ListNumberAdapter(YourActivity act, List<String> listNumber){
mActivity = act;
....
....
}

现在,声明您传递给具有类范围的适配器的 ArrayList listOfNumbers,以便可以从您的 Activity 中的方法访问它。

您的 Activity 的基本设置现在将是:

public class YourActivity extends Activity {

ListNumberAdapter listNumberAdapter;
List<String> listOfNumbers;
ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

listView = ....;

listOfNumbers = new ArrayList<String>();

// Popuplate 'listOfNumbers'

listNumberAdapter = new ListNumberAdapter(this, listOfNumbers);

listView.setAdapter(listNumberAdapter);
....
}
}

我假设您能够在覆盖的 onActivityResult(int, int, Intent) 方法(在您的 Activity 中)中接收电话号码,但无法在 ListView :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();

....
....

// Contact's phone number
String contactNumber = ...;

// Set the String (contactNumber) at the specified position
// Position is obtained by using the variable we defined in
// the adapter
listOfNumbers.set(listNumberAdapter.positionClicked, contactNumber);

// Finally, call notifyDataSetChanged() on your adapter
listNumberAdapter.notifyDataSetChanged();

}
}

ListNumberAdapter 中定义的按钮更改 OnClickListener:

holder.btnAddress.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);

// Update the 'positionClicked' variable using 'position'
// You will need to mark 'position' as 'final' in
// 'getView's' method signature
positionClicked = position;

// Use mActivity in place of mContext because
// 'startActivityForResult(Intent, int)' is defined in Activity,
// but not in Context
mActivity.startActivityForResult(i,0); // Works now
}
});

如果您不想将 positionClicked 保留为公共(public)变量,请将其声明为私有(private)变量并为其提供访问器方法。

关于android - 如何获取电话号码并在 BaseAdapter 中使用选定用户填写 EditText 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19948072/

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