将数据从适配器通过对话框传递到活动

时间:2019-05-16 02:00:31

标签: android alertdialog

我试图通过适配器之间的对话框将数据从适配器传递到活动。

我当前的数据流是

RecyclerAdapter->确认活动->聊天活动

我想要的

RecyclerAdapter->自定义对话框->聊天活动

Image describing data flow

以前,在单击时,我只是打算将其转移到确认活动中,然后再转移到聊天活动中,但是现在无法执行此操作。我在post上读过有关使用共享首选项的信息,但是无法成功实现,因此我想知道是否有更好的方法来解决这个问题,如果我丢失任何信息,请告知我,我将对其进行更新< / p>

适配器

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="InspectTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item> 
<item name="android:windowContentOverlay">@null</item>

<item name="android:textAllCaps">false</item> 
 </style>


 <style name="InspectTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar"> 
<!--<item name="android:windowSplashscreenContent">@mipmap/ic_splash</item>-->
<item name="android:windowBackground">@mipmap/ic_splash</item>
<item name="android:windowNoTitle">true</item>
<item name="android:noHistory">true</item>
<item name="android:windowFullscreen">true</item>
    </style>
</resources> 

对话

    public void openDialog(){

    FragmentManager manager = ((AppCompatActivity)mContext).getSupportFragmentManager();

    Confirmation_Dialog confirmation_dialog = new Confirmation_Dialog();
    confirmation_dialog.show(manager, "example dialog");



}

}

5 个答案:

答案 0 :(得分:0)

只需使用捆绑包将数据传递到新的活动即可。

在适配器中

String value="Hello world";
Intent i = new Intent(context, NewActivity.class);    
i.putExtra("key",value);
startActivity(i);

然后在新的活动中,检索这些值:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("key");
    //The key argument here must match that used in the other activity
}

答案 1 :(得分:0)

您的对话框是FragmentDialog,您可以使用setArguments方法来传递参数。

答案 2 :(得分:0)

不要使用共享首选项来传递数据,共享首选项更像是将数据保存在手机中以备将来参考。在这种情况下(如建议使用@average_developer),请使用Intent Bundles将数据传递到目标活动。

我认为,在您的情况下,您必须使用(下面的代码)实际获取一些信息,以标识在接下来的活动中将创建哪个聊天。

 @Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
    Intent i = new Intent(this, ProductActivity.class);
    i.putExtra("item_id", manager.getItemIdAtIndex(pos));
    startActivity(i);
}

答案 3 :(得分:0)

您可以在活动类中创建适配器click事件,并像下面在适配器中那样使接口进入适配器:

 onCircularsClick _oncircularClick;

    public interface onCircularsClick {

        public void _onCircularClick(Circular.TableBean bean);
    }

您的适配器构造器

 public CircularListAdapter(Context ctx,  onCircularsClick __oncircularClick) {
        this.ctx = ctx;


        this._oncircularClick = __oncircularClick;

    }

并设置点击类似

viewHolder.lin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                _oncircularClick._onCircularClick(list.get(i));//data that you want to pass when click fires
            }
        });

在从活动中设置适配器的同时,您可以在该位置获得此click事件,因此可以将代码(单击(打开对话框))写入活动类中

答案 4 :(得分:0)

我没有将对话框保存在单独的文件中,而是将其移入了适配器类