gpt4 book ai didi

安卓适配器和上下文菜单

转载 作者:行者123 更新时间:2023-11-30 04:07:18 25 4
gpt4 key购买 nike

我是android新手,不太懂adapter的使用?我一直在尝试制作 ContextMenu,它会在单击列表中的一个项目时弹出: 我的 Activity 是这样的,没有我为 ContextMenu 尝试过的东西,因为它很有用:

public class Proj2Activity extends Activity {
public static final String TAG = "MyActivity";
private TweetListAdapter1 twa;
private ListView myListView;
ArrayList<TweetModel> tweets;
public static double distance(float lat_a, float lng_a, float lat_b, float lng_b) {
float pk = (float) (180/3.14169);

float a1 = lat_a / pk;
float a2 = lng_a / pk;
float b1 = lat_b / pk;
float b2 = lng_b / pk;

float t1 = FloatMath.cos(a1)*FloatMath.cos(a2)*FloatMath.cos(b1)*FloatMath.cos(b2);
float t2 = FloatMath.cos(a1)*FloatMath.sin(a2)*FloatMath.cos(b1)*FloatMath.sin(b2);
float t3 = FloatMath.sin(a1)*FloatMath.sin(b1);
double tt = Math.acos(t1 + t2 + t3);

return 6366000*tt;
}


public static Location getLocation(Context ctx) {
LocationManager lm = (LocationManager) ctx
.getSystemService(Context.LOCATION_SERVICE);
List<String> providers = lm.getProviders(true);

/*
* Loop over the array backwards, and if you get an accurate location,
* then break out the loop
*/
Location l = null;

for (int i = providers.size() - 1; i >= 0; i--) {
l = lm.getLastKnownLocation(providers.get(i));
if (l != null)
break;
}
return l;
}




/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LoadTweetsTask ltt = new LoadTweetsTask("androiddev");
ltt.execute();


final TextView text1 = (TextView) findViewById(R.id.nume);
final Button btnGo = (Button) findViewById(R.id.button1);

btnGo.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
String name1 = text1.getText().toString();

SharedPreferences settings = getSharedPreferences("My_Pref", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(name1, true);
editor.commit();
LoadTweetsTask ltt = new LoadTweetsTask(name1);
ltt.execute();
}
});


}




private class LoadTweetsTask extends AsyncTask<Void, Void, Void> {

ProgressDialog progressDialog;
public String name;


public LoadTweetsTask(String name) {
this.name = name;
}

@Override
protected void onPreExecute() {
tweets = new ArrayList<TweetModel>();

progressDialog = new ProgressDialog(Proj2Activity.this);
progressDialog.setMessage("Loading Tweets");
progressDialog.show();

}

@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();

TweetListAdapter1 adapter = new TweetListAdapter1(getApplicationContext(), tweets);
((ListView)findViewById(R.id.listTweets)).setAdapter(adapter);
}

@Override
protected Void doInBackground(Void... params) {



HttpClient client = new DefaultHttpClient();

String requestUrl = "http://api.twitter.com/1/statuses/user_timeline.json" + "?screen_name=" + name + "&count=200";
HttpGet request = new HttpGet(requestUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();

try {
String jsonResponse = client.execute(request, responseHandler);

JSONArray json = new JSONArray(jsonResponse);
//used to display 20 valid tweets from 200 tweets which have the location specified
int count = 0;
for (int i = 0; i < json.length(); i++) {
if(count <= 20){
JSONObject jsonTweet = json.getJSONObject(i);

try{

JSONObject obj = jsonTweet.getJSONObject("geo");

if(obj!=null){
Location myLocation = getLocation(getBaseContext());
double distance;
JSONArray arr = obj.getJSONArray("coordinates");
float tweetc1 = (float) arr.getDouble(0);
float tweetc2 = (float) arr.getDouble(1);
Log.d("COORDTweet",Float.toString(tweetc1)+ " " +Float.toString(tweetc2) );
float my1 = (float) 44.438254;
float my2 = (float) 26.051009;
Log.d("COORDMY",Float.toString(my1)+ " " +Float.toString(my2) );
distance = distance(tweetc1, tweetc2, my1, my2);
Log.d("Distance",Double.toString(distance));
tweets.add(new TweetModel(jsonTweet.getJSONObject("user").getString("name"), jsonTweet.getString("created_at"), jsonTweet.getString("text"),(int)distance/1000));

count++;
}

Log.d("TRY", "OK");

}catch(JSONException e){
Log.d("EXCP","NULL");
}

}
else{
break;
}
}

}

catch(ClientProtocolException e) {
Log.e(TAG, e.getMessage(), e);
}
catch (IOException e ) {
Log.e(TAG, e.getMessage(), e);
}
catch (JSONException e ) {
Log.e(TAG, e.getMessage(), e);
}
return null;

}

}
}

适配器类:

public class TweetListAdapter1 extends BaseAdapter {
Context context;
ArrayList<TweetModel> items;

public TweetListAdapter1(Context context, ArrayList<TweetModel> items) {
this.context = context;
this.items = items;
}

public int getCount() {
return items.size();
}

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

public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_item_tweet, parent, false);

TextView txtMessage = (TextView)rowView.findViewById(R.id.txtMessage);
TweetModel m = items.get(position);
txtMessage.setText("Name: " + m.getName() +"\n"+ "Distance :"+ m.getDistance() + " Km\n" + "Tweet: " + m.getTweet() + "\n" + "Date: " + m.getDate() + "\n");

TextView txtMessage1 = (TextView)rowView.findViewById(R.id.txtMessage1);
txtMessage1.setText("Ala bala ");
return rowView;
}

}

我想做的是打开一个包含两个操作的上下文菜单:Action1 和 Action2 ...

最佳答案

I've been trying to make ContextMenu, that will pop up to at click on a item from the list

因此您需要在您的Activity 类中实现它。

首先你需要重写onCreateContextMenu然后重写onContextItemSelected方法

@Override
public void onCreateContextMenu(ContextMenu cMenu, View parent, ContextMenu.ContextMenuInfo info) {
new MenuInflater(YourActivity.this).inflate(R.menu.conmenu, cMenu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.option1:
//do some work
break;
case R.id.option2:
// do some work
break;
}
...
}

你需要阅读一些教程所以Android: Context menu exampleContext Menu | Android Developer Tutorial

关于安卓适配器和上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403734/

25 4 0