如何使自定义可按索引单击



我正在学习本教程,并尝试使个人资料照片和帖子中发布的图片可点击。

如果你访问链接,你可以看到它基本上是什么样子。

根据图片的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);

最新更新