我正在学习本教程,并尝试使个人资料照片和帖子中发布的图片可点击。
如果你访问链接,你可以看到它基本上是什么样子。
根据图片的id,我想冒险去另一个活动。以下是我发现的让我如此困惑的事情。
我创建了一个JSON文件,并将其保存到一个动态网页中。
"id":1,"名称":"标记",
"id":2,"name":"Tom",
方法(名称为文本视图):
name.setText(item.getName());
使name文本视图成为JSON文件中的"name"字段。
方法:
name.setText(Integer.toString(item.getId()));
使名称文本视图成为JSON文件中的"id"字段。
疯狂的是,返回的值是一个字符串和int变量。
所以如果尝试
if (item.getId() == 1) {
Intent myIntent1 = new Intent(context, NameActivity.class);
myIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent1);
}
if (item.getId() == 2) {
Intent myIntent2 = new Intent(context, NameActivitySecondAttempt.class);
myIntent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent2);
}
不幸的是,if语句无法理解"name"或"id"的不同值。
对于我要点击的两个视图,我在OnClickListener
中有这些if语句。请参阅下面的扩展代码。
profilePic.setOnClickListener(新视图.OnClickListener(){
feedImageView.setOnClickListener(新View.OnClickListener(){
这里有一些XML
<com.pm.pmv5.listviewfeed.FeedImageView
android:id="@+id/feedImage1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:clickable="true"
android:focusable="true"
android:scaleType="fitXY"
android:visibility="visible" />
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/profilePic"
android:layout_width="@dimen/feed_item_profile_pic"
android:layout_height="@dimen/feed_item_profile_pic"
android:clickable="true"
android:focusable="true"
android:scaleType="fitCenter" >
</com.android.volley.toolbox.NetworkImageView>
当页面加载时,数字或名称将正确显示在正确的位置。但我不能根据帖子的名称或号码去参加单独的特定活动。
有人能帮我吗?
////// this doesn't work either //////
switch (item.getId()) {
case 1:
Intent myIntent1 = new Intent(context, NameActivity.class);
myIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent1);
break;
case 2:
Intent myIntent2 = new Intent(context, StartMenuV1.class);
myIntent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent2);
break;
case 3:
Intent myIntent3 = new Intent(context, StartMenuV2.class);
myIntent3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent3);
break;
}
}
////// this doesn't work either //////
以下是我调整课程的方法。。来自教程。你为什么不试着下载这个项目呢。使用上面的代码更改FeedListAdapter类。这需要10分钟。您可以单击图像,但item.getId()
的值不一致。另外,不要忘记将xml的focusable值和colonel值更改为true。谢谢你的帮助。
package com.pm.pmv5.listviewfeed.adapter;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.text.Html;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.pm.pmv5.R;
import com.pm.pmv5.listviewfeed.FeedImageView;
import com.pm.pmv5.listviewfeed.app.AppController;
import com.pm.pmv5.listviewfeed.data.FeedItem;
import com.pm.pmv5.takeover.BoardActivity;
import com.pm.pmv5.takeover.BoardActivity2;
import com.pm.pmv5.takeover.BoardActivity3;
import com.pm.pmv5.takeover.NameActivity;
import com.pm.pmv5.takeover.StartMenuV1;
import com.pm.pmv5.takeover.StartMenuV2;
import com.pm.pmv5.takeover.StartMenuV3;
@SuppressLint("InflateParams")
public class FeedListAdapter extends BaseAdapter implements
View.OnClickListener {
private Activity activity;
private LayoutInflater inflater;
private List<FeedItem> feedItems;
Context context;
baZOOKA heyNOW;
FeedItem item;
String nueSELECTOR;
MediaPlayer mp;
NetworkImageView profilePic;
FeedImageView feedImageView;
TextView name;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
this.activity = activity;
this.feedItems = feedItems;
}
@Override
public int getCount() {
return feedItems.size();
}
@Override
public Object getItem(int location) {
return feedItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
context = AppController.getInstance();
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.feed_item, null);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
name = (TextView) convertView.findViewById(R.id.name);
TextView timestamp = (TextView) convertView
.findViewById(R.id.timestamp);
TextView statusMsg = (TextView) convertView
.findViewById(R.id.txtStatusMsg);
TextView url = (TextView) convertView.findViewById(R.id.txtUrl);
profilePic = (NetworkImageView) convertView
.findViewById(R.id.profilePic);
feedImageView = (FeedImageView) convertView
.findViewById(R.id.feedImage1);
item = feedItems.get(position);
// name.setText(item.getName());
final int ok234 = feedItems.indexOf(1);
int index = feedItems.indexOf("papa"); // index = 2
// name.setText(Integer.toString(ok234));
nueSELECTOR = Integer.toString(item.getId());
name.setText(nueSELECTOR);
// Converting timestamp into x ago format
CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(
Long.parseLong(item.getTimeStamp()),
System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS);
timestamp.setText(timeAgo);
// Chcek for empty status message
if (!TextUtils.isEmpty(item.getStatus())) {
statusMsg.setText(item.getStatus());
statusMsg.setVisibility(View.VISIBLE);
} else {
// status is empty, remove from view
statusMsg.setVisibility(View.GONE);
}
// Checking for null feed url
if (item.getUrl() != null) {
url.setText(Html.fromHtml("<a href="" + item.getUrl() + "">"
+ item.getUrl() + "</a> "));
// Making url clickable
url.setMovementMethod(LinkMovementMethod.getInstance());
url.setVisibility(View.VISIBLE);
} else {
// url is null, remove from the view
url.setVisibility(View.GONE);
}
// user profile pic
profilePic.setImageUrl(item.getProfilePic(), imageLoader);
// Feed image
if (item.getImge() != null) {
feedImageView.setImageUrl(item.getImge(), imageLoader);
feedImageView.setVisibility(View.VISIBLE);
feedImageView
.setResponseObserver(new FeedImageView.ResponseObserver() {
@Override
public void onError() {
}
@Override
public void onSuccess() {
}
});
} else {
feedImageView.setVisibility(View.GONE);
}
profilePic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (item.getId() != 1) {
name.setText(item.getName());
}
if (item.getId() == 2) {
// name.setText(item.getName());
}
}
});
feedImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (item.getId()) {
case 1:
mp = MediaPlayer.create(context, R.raw.cameraflash);
mp.setVolume(100, 100);
mp.start();
Intent myIntent1 = new Intent(context, NameActivity.class);
myIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent1);
break;
case 2:
mp = MediaPlayer.create(context, R.raw.cameraflash);
mp.setVolume(100, 100);
mp.start();
Intent myIntent2 = new Intent(context, StartMenuV1.class);
myIntent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent2);
break;
case 3:
mp = MediaPlayer.create(context, R.raw.cameraflash);
mp.setVolume(100, 100);
mp.start();
Intent myIntent3 = new Intent(context, StartMenuV2.class);
myIntent3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent3);
break;
}
}
});
return convertView;
}
@Override
public void onClick(View v2) {
// TODO Auto-generated method stub
switch (v2.getId()) {
case R.id.profilePic:
break;
case R.id.feedImage1:
break;
}
}
}
调试并逐步执行代码,或者添加一些日志记录来查看发生了什么。
每次你想使用item.getId()
,只需添加一些代码,如下所示:
int id = item.getId();
Log.d("MyApp", "item ID is: " + id);