Android 如何在不扩展 listActivity 的情况下为 listView 使用适配器

标签 android listview adapter listactivity

我有一个带有选项卡的应用程序。在一个选项卡中,我需要将数据(字符串)放入行中。为此,我选择了 tableLayout,但是当我想在其行上使用 contextmenu 时,它不起作用。

我可以显示 contextmenu onLongClick 但问题是我无法获取有关所选行的信息以编辑或删除所选行。然后我在讨论中读到,如果我们有很多行,使用 listViewtablelayout 更好。但是我看到的示例扩展了 listactivity 但我不想这样做。

因此,当我尝试在不扩展 listactivity 的情况下处理 listView 时,我不知道该怎么做,我的意思是我从未使用过 listView 之前,所以我尝试了在互联网上找到的不同示例来理解它,但它不起作用。以下是我目前为 listView 所做的:

String [] items=getRessources().getStringArray(R.arra.resolution);
 //Resolution is an array of strings
ListView lv=(ListeView) findViewById(R.id.listView);
v.setAdapter(new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1, items);

当我编译它时,我得到一个列表,其中包含我的数组元素,但首先,我想更改我不能更改的文本颜色。其次,我想将行动态添加到我也不知道该怎么做的列表中。我想我必须使用 adapter 才能做到这一点,但我不知道该怎么做。 有人可以指导我完成这个吗?我只想知道如何将我的列表附加到 adapter,这将允许我动态添加行、添加 contextMenu 等。

最佳答案

主要 Activity 类:

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;

public class SelectedActivity extends Activity {

private SelectedAdapter selectedAdapter;
private ArrayList<String> list;

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

    // populate the model - a simple a list
    list = new ArrayList<String>();
    list.add("Apple");
    list.add("Orange");
    list.add("Grape");
    list.add("Grape1");
    list.add("Grape2");
    list.add("Grape3");
    list.add("Grape4");
    list.add("Grape5");
    list.add("Grape6");

    // create our SelectedAdapter
    selectedAdapter = new SelectedAdapter(this,0,list);
    selectedAdapter.setNotifyOnChange(true);

    ListView listview = (ListView) findViewById(R.id.listExample);
    listview.setAdapter(selectedAdapter);

    listview.setOnItemClickListener(new OnItemClickListener() {
        //@Override
        public void onItemClick(AdapterView arg0, View view,
                                       int position, long id) {
            // user clicked a list item, make it "selected"
            selectedAdapter.setSelectedPosition(position);
        }
    });
}

适配器类:

   import java.util.List;
    import android.content.Context;
    import android.graphics.Color;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.TextView;

    public class SelectedAdapter extends ArrayAdapter{

        // used to keep selected position in ListView
        private int selectedPos = -1;   // init value for not-selected

        public SelectedAdapter(Context context, int textViewResourceId,
                       List objects) {
             super(context, textViewResourceId, objects);
        }
        public void setSelectedPosition(int pos){
        selectedPos = pos;
             // inform the view of this change
             notifyDataSetChanged();
        }
        public int getSelectedPosition(){
             return selectedPos;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                 View v = convertView;
                 // only inflate the view if it's null
                 // if (v == null) {
                        LayoutInflater vi =   (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        v = vi.inflate(R.layout.selected_row, null);
                 //  }

                 // get text view
                     TextView label = (TextView)v.findViewById(R.id.txtExample);
                     Button btn=(Button)v.findViewById(R.id.btn1);

                     // change the row color based on selected state
                     if(selectedPos == position){
                        label.setBackgroundColor(Color.CYAN);
                        btn.setBackgroundResource(R.drawable.next);
                     }
                     else{
                        label.setBackgroundColor(Color.WHITE);
                     }

                     label.setText(this.getItem(position).toString());       
                     return(v);
        }
}

关于Android 如何在不扩展 listActivity 的情况下为 listView 使用适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267060/

相关文章:

Android Studio 不删除我在 Adapter 中的项目?

android - 如何将 Kotlin 代码编译到 jvmTarget ="1.8"进行测试

java - 在android中的列表适配器中的列表的特定行中使用条件

c# - 在 C# 中获取视频适配器的硬件 GUID

android - ListView 错误无法启动 Activity ComponentInfo

java - 清除ArrayList并在适配器ListView中从 fragment 执行notifyDataSetChanged

java - Android Adapter的convertview未更新

java - Android 本地化查询

AndroidId MediaPlayer prepareAsync 方法

java - 数据库android从表中选择